home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / basic / qbuddy21.lzh / QBUDDY21.BAS < prev    next >
BASIC Source File  |  1988-04-20  |  66KB  |  1,850 lines

  1. DECLARE SUB Help (PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, SYS.PATH$)
  2. DECLARE SUB hold ()
  3. DECLARE SUB Sclr (fc%, bc%)
  4. DECLARE SUB tyme ()
  5. DECLARE SUB menu (fgd!, BKGD!, brdr!, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  6. DECLARE SUB box (r1%, c1%, R2%, c2%, men%)
  7. DECLARE SUB box.text (MSG$, row%, col%, front, back, ofront, oback)
  8. DECLARE SUB center (whichline!, tl$)
  9. DECLARE SUB rsmg (whichline!, tl$)
  10. DECLARE SUB infile (PAT.PATH$, APT.PATH$, inflg%, FILENAME$, fc%, bc%, SYS.PATH$, ERCD%, handle%, faccess%, mode%, SUB.PATH$)
  11. '=======================================
  12. ' Just a bunch of source code. Kinda
  13. ' useful for some and elementary for  
  14. ' most. Must use Quickbasic 4.0 and
  15. ' Thomas Hanlin's ADVBAS40/99.
  16. ' QB QBUDDY.BAS /L ADVBAS - To Load
  17. ' Free - Joe Lincoln - LINX BBS - (713) 440-7364
  18. '=======================================
  19. Joe:
  20. ' Quick B
  21. ' QBUDDY SETUP
  22. ' Version QB21
  23. endofdata = FALSE
  24. ON ERROR GOTO 40000
  25. ' init
  26.     KEY OFF: EL = 0: EN = 0: KEY 1, CHR$(201): KEY 2, CHR$(202): KEY 3, CHR$(203): KEY 4, CHR$(204): KEY 5, CHR$(205)
  27.     KEY 6, CHR$(206): KEY 7, CHR$(207): KEY 8, CHR$(208): KEY 9, CHR$(209)
  28.     DEF fnf$ (x) = RIGHT$("0" + MID$(STR$(x), 2), 2)
  29.     DIM PI$(5), Y(5), x(5), API$(16), RCC$(24), RC$(24), TC$(25), AC$(25), MD(12), MO$(12), DA$(8), LOCKS$(3)
  30.     DIM SHARED m$(10), np, CH, yn$, text$(10), col$(15)
  31.     DIM NOYES$(2): NOYES$(0) = "NO ": NOYES$(1) = "YES"
  32.     DIM YESNO$(2): YESNO$(0) = "YES": YESNO$(1) = "NO "
  33.     DIM ONOFF$(2): ONOFF$(0) = "OFF": ONOFF$(1) = "ON "
  34.     DIM MON$(4): MON$(0) = "40x25 Mono ": MON$(1) = "40x25 Color": MON$(2) = "80x25 Color": MON$(3) = "80x25 Mono "
  35.     DIM HRDSK$(16): DIM SYSBRD(16): DIM SHARED SETMM(16)
  36.     DIM PRI$(14), parm$(8), h(8), v(8), LN(8), item%(8), J(8)
  37.     LOCKS$(0) = STRING$(7, 219): LOCKS$(1) = STRING$(4, 219) + "NUM"
  38.     LOCKS$(2) = "CAP" + STRING$(4, 219): LOCKS$(3) = "CAP" + CHR$(219) + "NUM"
  39.     NTR$ = CHR$(13): BKSP$ = CHR$(8): ESC$ = CHR$(2): UP$ = CHR$(24): DN$ = CHR$(25)
  40.     RT$ = CHR$(26): LF$ = CHR$(27): BREAK$ = CHR$(3): ENTR$ = " " + CHR$(17) + STRING$(2, 196) + CHR$(217) + " "
  41.     NUMS = 1: CAPS = 2
  42.     DEF SEG = 0: IF (PEEK(H410) AND H30) <> &H30 THEN HL = 15
  43.     LF.CURSOR = 75: RT.CURSOR = 7: END.KEY = 79: INS.KEY = 82: DEL.KEY = 83: HOME = 71
  44.     DN.CURSOR = 80: UP.CURSOR = 72: CTRL.END = 117: ESC = 27: CTRL.RT = 116: CTRL.LF = 115: PG.UP = 73: PG.DN = 81
  45.     YES = NOT no: no = NOT YES
  46.     B1$ = CHR$(196) + CHR$(210)
  47.     B1$ = CHR$(218) + B1$ + B1$ + B1$ + B1$ + B1$ + B1$ + B1$ + CHR$(196) + CHR$(191)
  48.     B2$ = " " + CHR$(186)
  49.     B2$ = CHR$(179) + B2$ + B2$ + B2$ + B2$ + B2$ + B2$ + B2$ + " " + CHR$(179)
  50.     B3$ = B2$
  51.     B4$ = CHR$(196) + CHR$(208)
  52.     B4$ = CHR$(192) + B4$ + B4$ + B4$ + B4$ + B4$ + B4$ + B4$ + CHR$(196) + CHR$(217)
  53.     v(1) = 6: h(1) = 28: LN(1) = 15 'sys.path
  54.     v(2) = 7: h(2) = 28: LN(2) = 15 'pat.path
  55.     v(3) = 8: h(3) = 28: LN(3) = 15 'apt.path
  56.     v(4) = 9: h(4) = 28: LN(4) = 15 'act.path
  57.     v(5) = 10: h(5) = 20: LN(5) = 40 'prog.name
  58.     v(6) = 11: h(6) = 17: LN(6) = 2 'fc%
  59.     v(7) = 12: h(7) = 17: LN(7) = 2 'bc%
  60.     v(8) = 13: h(8) = 14: LN(8) = 15 'sub.path
  61.     
  62.     Y(1) = 8: x(1) = 20: Y(2) = 10: x(2) = 20: Y(3) = 12: x(3) = 20: Y(4) = 14: x(4) = 20
  63.     MD(1) = 31: MD(3) = 31: MD(4) = 30: MD(5) = 31: MD(6) = 30: MD(7) = 31: MD(8) = 31: MD(9) = 30: MD(10) = 31: MD(11) = 30: MD(12) = 31
  64.     MO$(1) = "JANUARY": MO$(2) = "FEBRUARY": MO$(3) = "MARCH": MO$(4) = "APRIL": MO$(5) = "MAY": MO$(6) = "JUNE": MO$(7) = "JULY": MO$(8) = "AUGUST": MO$(9) = "SEPTEMBER": MO$(10) = "OCTOBER": MO$(11) = "NOVEMBER": MO$(12) = "DECEMBER"
  65.     DA$(1) = "MONDAY": DA$(2) = "TUESDAY": DA$(3) = "WEDNESDAY": DA$(4) = "THURSDAY": DA$(5) = "FRIDAY": DA$(6) = "SATURDAY": DA$(7) = "SUNDAY": DA$(8) = "ERROR"
  66.     HB1$ = CHR$(196): HB2$ = CHR$(205): HB3$ = CHR$(220): VB1$ = CHR$(179): VB2$ = CHR$(186): VB3$ = CHR$(219): ULC1$ = CHR$(218): URC1$ = CHR$(191): LLC1$ = CHR$(192): LRC1$ = CHR$(217): ULC2$ = CHR$(201): URC2$ = CHR$(187): LLC2$ = CHR$(200): _
  67.                                                                                                           LRC2$ = CHR$(188)
  68.     ULC3$ = CHR$(220): URC3$ = CHR$(220): LLC3$ = CHR$(219): LRC3$ = CHR$(219): ML11$ = CHR$(195): MR11$ = CHR$(180): ML22$ = CHR$(204): MR22$ = CHR$(185): HB771$ = STRING$(77, HB1$): HB772$ = STRING$(77, HB2$): HB773$ = STRING$(77, HB3$): SP77$ _
  69.  = STRING$(77, 32)
  70.     ENTSYMB$ = CHR$(17) + CHR$(196) + CHR$(196) + CHR$(217)
  71.     PARAM$ = "AMPARAM.DAT"
  72.     H1$ = STRING$(80, 61): CLR$ = STRING$(80, 32): H5$ = STRING$(80, 31)
  73.     DATA Black,Blue,Green,Cyan,Red,Magenta,Brown-Yellow,White,Gray,Light Blue,Light Green,Light Cyan,Light Red,Light Magenta,Yellow,High-White
  74.     FOR L = 0 TO 15: READ col$(L): NEXT L
  75.     DATA    ( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER ),( WHATEVER )
  76.     DATA   (emergency ),(  paper   ),(up winnie ),(low winnie),(deliv rug ),( consult  ),(part body ),( panorex  ),( bull s...),(cement pot),(fit lining),(cem lining),(forginimpr)
  77.     FOR L = 1 TO 25: READ TC$(L)
  78.     NEXT L
  79.     DATA EX,RC,RB,CK,BL,BU,SP,RE,BUL,RI,FP,CB,SOS,PA,UW,LW,RT,CO,PB,PX,BS,CP,FL,CL,FI
  80.     FOR L = 1 TO 25: READ AC$(L)
  81.     NEXT L
  82.     DATA BASIC RECALL,CALLBACK,FAILED RETURN,FAILED ACTIVE,TWO APPT,DOCTOR APPT,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED,RESERVED
  83.     FOR L = 1 TO 24: READ RC$(L): NEXT L
  84.     DATA BR,CB,FR,FA,TJ,DX,MT,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE,RE
  85.     FOR L = 1 TO 24: READ RCC$(L): NEXT L
  86.     LCOL% = 5: TROW% = 5: RCOL% = 79: BROW% = 20: page% = 0: FRAME% = 1: ty% = 3
  87.  
  88. 'GOSUB write.rc.ovl: END
  89.  
  90. GOSUB read.parm: GOSUB read.tc.ovl: GOSUB read.rc.ovl: GOSUB logo: GOSUB main.menu: CLS : END
  91. 40 'Edit AMPARM.DAT
  92.         AMPARM$ = "AMPARM.DAT"
  93.         UP$ = CHR$(24): DN$ = CHR$(25): LF$ = CHR$(27): RT$ = CHR$(26)
  94.         CALL Sclr(fc%, bc%)
  95.         LABEL$ = "Write Configuration File"
  96.         CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  97.         CALL equipment(memory%, parallel%, seriel%, game%)
  98.     a$ = ver$: center 2, a$
  99.     LOCATE 6, 5: PRINT "Default Program Drive :";
  100.     LOCATE 7, 5: PRINT "CLIENT File Path     :";
  101.     LOCATE 8, 5: PRINT "APPOINTMENT File Path :";
  102.     LOCATE 9, 5: PRINT "ACCOUNTING  File Path :";
  103.     LOCATE 10, 5: PRINT "Program name :";
  104.     LOCATE 11, 5: PRINT "FORE color:";
  105.     LOCATE 12, 5: PRINT "BACK color:";
  106.     LOCATE 13, 5: PRINT "SubDir  :";
  107. GOSUB overlay
  108.  
  109. LOCATE 14, 6: COLOR bc%, fc%: PRINT "============ HARDWARE ============"; : COLOR fc%, bc%
  110.     
  111.     LOCATE 15, 5: PRINT "Memory in RAM        = "; memory%; " kbytes"
  112.     LOCATE 16, 5: PRINT "Number printer ports = "; parallel%
  113.     LOCATE 17, 5: PRINT "Number serial ports  = "; seriel%
  114.     LOCATE 18, 5: PRINT "Number game ports    = "; game%
  115.     LOCATE 19, 5: PRINT "MS-DOS version       = "; maj%; "."; min%;
  116.     LOCATE 20, 5: PRINT "Printer Installed    = "; PRINTER$;
  117.     'CALL mmcheck(mouse%)
  118.     'IF mouse% THEN LOCATE 20, 5: PRINT "A mouse with "; mouse%; " buttons is present."
  119. LOCATE 12, 46: COLOR bc%, fc%: PRINT "======= COLOR SELECTIONS =======";
  120.     COLOR fc%, bc%
  121.     v = 13
  122.      FOR col% = 0 TO 7
  123.     LOCATE v, 45: PRINT col%; " ";
  124.     COLOR col%, bc%
  125.     LOCATE v, 48: PRINT col$(col%);
  126.     COLOR fc%, bc%
  127.     v = v + 1
  128.      NEXT col%
  129.     v = 13
  130.      FOR col% = 8 TO 15
  131.     LOCATE v, 60: PRINT col%; " ";
  132.     COLOR col%, bc%
  133.     LOCATE v, 64: PRINT col$(col%);
  134.     COLOR fc%, bc%
  135.     v = v + 1
  136.      NEXT col%
  137.         a$ = STRING$(70, 32)
  138.         center 23, a$: center 24, a$
  139.         a$ = "Press ESCape To EXIT or Any Key To Edit"
  140.         CALL center(23, a$)
  141.         GOSUB 1000
  142.         IF a = 27 THEN RETURN
  143.         a$ = STRING$(70, 32)
  144.         center 23, a$: center 24, a$
  145.         a$ = "Just enter RETurn to accept current data."
  146.         CALL center(23, a$)
  147.        
  148.  GOSUB enterdata: GOTO 60
  149.  
  150.  
  151. overlay:
  152.     a$ = STRING$(40, 32): AA$ = STRING$(10, 32): AAA$ = STRING$(3, 32)
  153.     LOCATE 6, 28: PRINT AA$; : LOCATE 6, 28: PRINT SYS.PATH$
  154.     LOCATE 7, 28: PRINT AA$; : LOCATE 7, 28: PRINT PAT.PATH$
  155.     LOCATE 8, 28: PRINT AA$; : LOCATE 8, 28: PRINT APT.PATH$
  156.     LOCATE 9, 28: PRINT AA$; : LOCATE 9, 28: PRINT ACT.PATH$
  157.     LOCATE 10, 20: PRINT a$; : LOCATE 10, 20: PRINT PROG.NAME$
  158.     LOCATE 11, 16: PRINT AAA$; : LOCATE 11, 16: PRINT fc%
  159.     LOCATE 12, 16: PRINT AAA$; : LOCATE 12, 16: PRINT bc%
  160.     LOCATE 13, 14: PRINT AA$; : LOCATE 13, 14: PRINT SUB.PATH$
  161. RETURN
  162.  
  163.  
  164. joekey:
  165. WD = 0: WS = 0: WL = 0: WI = 1: SOUND 80, .03: MOVE.IT = no: KY = 0: in$ = INKEY$
  166. QX = POS(0): QY = CSRLIN
  167. QC$ = control$: control$ = "": IF QC$ = "" THEN QC = no: GOTO pugin ELSE QC = YES
  168. IF INSTR("U#_", MID$(QC$, WI, 1)) = 0 THEN WI = WI + 1: GOTO pug1
  169. pugin:
  170.     CHAR.CODE = FIX(FL / 100): IF CHAR.CODE > 0 THEN FL = FL - CHAR.CODE * 100
  171.     IF PROMPT$ = "" THEN in$ = SPACE$(FL): GOTO pug2
  172.     in$ = LEFT$(PROMPT$ + SPACE$(FL), FL): WL = LEN(PROMPT$): PROMPT$ = ""
  173. pug1: IF MID$(in$, WL, 1) = " " THEN WL = WL - 1: IF WL >= 0 THEN GOTO pug1
  174. pug2: COLOR bc%, fc%
  175. pug3: LOCATE QY, QX, 1: PRINT in$;
  176. pug4: LOCATE QY, QX + WI - 1
  177. pug5: W$ = INKEY$: DEF SEG = &H40: QK = PEEK(&H17) AND 96:
  178.     IF QK1 <> QK THEN LOCATE 25, 73: PRINT LOCKS$(QK / 32); : QK1 = QK: SOUND 400 + QK, .3: GOTO pug4
  179.     IF W$ = "" THEN GOTO pug5
  180.     IF W$ = BREAK$ THEN GOTO lastpug
  181.     IF LEN(W$) = 1 THEN GOTO pug18 ELSE KY = ASC(RIGHT$(W$, 1))
  182.     IF QC THEN GOTO pug6
  183.     IF KY = INS.KEY THEN IF INSERT = no THEN INSERT = YES: LOCATE , , , 4, 13: GOTO pug3 ELSE INSERT = no:                             LOCATE , , , 13: GOTO pug5
  184. pug6: IF KY = RT.CURSOR THEN WI = WI - (WI < WL): GOTO pug4
  185.     IF KY = LF.CURSOR THEN WI = WI + (WI > 1): GOTO pug4
  186.     IF KY = DEL.KEY THEN IF NOT QC THEN in$ = LEFT$(in$, WI - 1) + RIGHT$(in$, FL - WI) + " ": WL = WL - 1: GOTO pug3 ELSE MID$(in$, WI, 1) = " ": GOTO pug3
  187.     IF INSERT THEN INSERT = no: LOCATE , , , 13
  188.     IF KY = HOME THEN WI = 1: GOTO pug4
  189.     IF KY = END.KEY THEN WI = WL + 1: GOTO pug4
  190.     IF KY = CTRL.END THEN in$ = LEFT$(in$, WI - 1) + SPACE$(FL - WI + 1): WL = WI - 1: GOTO pug3
  191.     IF KY <> CTRL.RT OR WI = WL + 1 THEN GOTO pug7
  192. pug19:  WI = WI + 1: IF WI = WL + 1 THEN GOTO pug4 ELSE IF MID$(in$, WI - 1, 1) = " " THEN GOTO pug4 ELSE GOTO pug19
  193. pug7: IF KY <> CTRL.LF OR WI = 1 THEN GOTO pug8
  194.     QC$ = control$: control$ = "": IF QC$ = "" THEN QC = no ELSE QC = YES
  195. pug20:  WI = WI - 1: IF WI = 1 THEN GOTO pug4 ELSE IF MID$(in$, WI - 1, 1) = " " THEN GOTO pug4 ELSE GOTO pug20
  196. pug8: MOVE.IT = YES: GOTO going
  197. pug18:  IF W$ = NTR$ THEN GOTO going
  198.     IF W$ = ESC$ THEN KY = ESC: MOVE.IT = YES: GOTO going
  199. pug21:  IF NOT QC THEN GOTO pug10
  200.     IF W$ <> BKSP$ THEN GOTO pug9
  201.     IF WI > 1 THEN WI = WI - 1: Q$ = MID$(QC$, WI, 1) ELSE GOTO pug3
  202.     IF INSTR("#U_", Q$) = 0 THEN GOTO pug21 ELSE MID$(in$, WI, 1) = " ": GOTO pug3
  203. pug9: IF WI > FL THEN GOTO pug10
  204.     Q$ = MID$(QC$, WI, 1)
  205.     IF Q$ = "#" THEN CHAR.CODE = NUMS: GOTO pug10
  206.     IF Q$ = "U" THEN CHAR.CODE = CAPS: GOTO pug11
  207.     IF Q$ = "_" THEN CHAR.CODE = 0: GOTO pug11
  208.     W$ = Q$: GOTO pug12
  209. pug10: IF CHAR.CODE = NUMS THEN IF (W$ = "-" AND WI > 1) OR W$ = "+" THEN in$ = W$ + in$: GOTO going:
  210. pug11: IF WI > FL THEN GOTO pug13
  211.     IF CHAR.CODE = 0 THEN IF W$ >= " " AND W$ <= "~" THEN GOTO pug12
  212.     IF CHAR.CODE = NUMS THEN IF W$ >= "0" AND W$ <= "9" THEN GOTO pug12
  213.     IF CHAR.CODE = CAPS THEN IF W$ >= "a" AND W$ <= "z" THEN W$ = CHR$(ASC(W$) - 32): GOTO pug12 ELSE IF W$ >= " " AND W$ < "a" THEN GOTO pug12
  214. pug13: IF W$ = BKSP$ THEN IF WI > 1 THEN in$ = LEFT$(in$, WI - 2) + RIGHT$(in$, FL - WI + 1) + " ": WL = WL - 1: WI = WI - 1: GOTO pug3
  215.     GOTO pug5
  216. pug12: IF NOT INSERT THEN MID$(in$, WI, 1) = W$ ELSE IF WL < FL THEN WL = WL + 1:      in$ = LEFT$(LEFT$(in$, WI - 1) + W$ + RIGHT$(in$, FL - WI + 1), FL): WI = WI + 1: GOTO pug3 ELSE GOTO pug5
  217.     IF WI > 1 THEN GOTO pug15
  218.     IF NOT QC THEN in$ = W$ + SPACE$(FL - 1): GOTO pug14
  219.     FOR QQ = 2 TO FL: IF INSTR("#u=UI_", MID$(QC$, QQ, 1)) > 0 THEN MID$(in$, QQ, 1) = " "
  220.     NEXT QQ
  221. pug14: LOCATE , QX: PRINT in$; : LOCATE , QX: WL = 1
  222. pug15: PRINT W$;
  223.     WI = WI + 1: IF WI > WL THEN WL = WI - 1
  224.     IF WI >= FL THEN GOTO pug16
  225.     IF QC THEN Q$ = MID$(QC$, WI, 1): IF INSTR("#Ul_", Q$) = 0 THEN W$ = Q$: GOTO pug12
  226. pug16: IF FL > 2 OR WL < FL THEN GOTO pug3
  227. going: COLOR fc%, bc%: LOCATE QY, QX, , 13: PRINT in$; : in$ = LEFT$(in$, WL): INSERT = no: RETURN
  228.  
  229.     LOCATE 25, 29
  230.     U$ = "press|" + ENTR$ + "|to continue": GOSUB pug17: FL = 0: GOSUB joekey
  231.     RETURN
  232.  
  233. pug17: U = 1: ULEN = LEN(U$): U1 = fc%: U2 = 7
  234. pug22:  UU = INSTR(U, U$, "|"): UU = UU - (UU = 0) * (ULEN + 1): PRINT MID$(U$, U, UU - U); : U = UU + 1: SWAP U1, U2: COLOR U1: IF ULEN > U OR U = 1 THEN GOTO pug22 ELSE COLOR fc%, bc%
  235.     RETURN
  236. lastpug:
  237. RETURN
  238.  
  239. enterdata:
  240. a$ = STRING$(50, 32): center 23, a$
  241. QK1 = 0: LOCATE 23, 11: U$ = UP$ + "-|prior line.|  " + DN$ + "-|next line.|  PgUp-|first line.|  PgDn-|last line.|": GOSUB pug17
  242. LOCATE 24, 10: PRINT "Cursor control keys";
  243. PRINT ":   "; LF$; "  "; RT$; "  CTRL"; LF$; "  CTRL"; RT$; "  Home  End  Ins  Del"
  244.  
  245. topgun:
  246.     
  247.     J = 1
  248.     item% = J
  249.     
  250. getiton:
  251.         
  252.         PROMPT$ = ""
  253.         LOCATE v(J), h(J): FL = LN(J)
  254.         QX = POS(0): QY = CSRLIN
  255.         
  256. 'build prompt
  257.         FOR x = QX TO QX + FL
  258.             LETTER$ = CHR$(SCREEN(QY, x))
  259.             PROMPT$ = PROMPT$ + LETTER$
  260.         NEXT x
  261.         
  262.         item% = J: parm$(item%) = PROMPT$
  263.         LOCATE v(J), h(J)
  264.         GOSUB joekey
  265.         IF NOT MOVE.IT THEN GOTO chngit
  266. 'moveit:
  267.     IF KY = UP.CURSOR THEN GOTO uparrow
  268.     IF KY = DN.CURSOR THEN GOTO dnarrow
  269.     IF KY = PG.UP THEN J = 1: GOSUB saveasis: GOTO getiton
  270.     IF KY = PG.DN THEN J = 8: GOSUB saveasis: GOTO getiton
  271.     IF KY = ESC THEN RETURN
  272.  
  273. chngit: IF in$ <> "" THEN parm$(J) = in$ ELSE parm$(J) = PROMPT$
  274.     IF J < 8 THEN J = J + 1:  GOTO getiton
  275.     GOTO exitedit
  276.  
  277. uparrow:
  278.  
  279.     J = J + (J > 1): GOTO getiton
  280.  
  281. dnarrow:
  282.  
  283.     J = J - (J < 8): GOTO getiton
  284.     
  285. saveasis:
  286.     LETTER$ = ""
  287.     FOR item% = 1 TO 8
  288.         parm$(item%) = ""
  289.         LOCATE v(item%), h(item%)
  290.         QX = POS(0): QY = CSRLIN
  291.  
  292.         FL = LN(item%)
  293.             FOR x = QX TO QX + FL
  294.                 LETTER$ = CHR$(SCREEN(QY, x))
  295.                 parm$(item%) = parm$(item%) + LETTER$
  296.             NEXT x
  297.             LETTER$ = ""
  298.     NEXT item%
  299.     RETURN
  300.  
  301. exitedit:
  302.     
  303.     GOSUB saveasis
  304.     SYS.PATH$ = parm$(1): PAT.PATH$ = parm$(2): APT.PATH$ = parm$(3)
  305.     ACT.PATH$ = parm$(4): PROG.NAME$ = parm$(5)
  306.     fc$ = parm$(6): fc% = VAL(parm$(6))
  307.     bc$ = parm$(7): bc% = VAL(parm$(7))
  308.     SUB.PATH$ = parm$(8)
  309.     GOSUB overlay
  310.     GOSUB write.parm
  311.     RETURN
  312.  
  313. 60 '
  314. write.parm:
  315.     AMPARM$ = "AMPARM.DAT"
  316.     SYS.PATH$ = RTRIM$(SYS.PATH$)
  317.     PAT.PATH$ = RTRIM$(PAT.PATH$)
  318.     APT.PATH$ = RTRIM$(APT.PATH$)
  319.     ACT.PATH$ = RTRIM$(ACT.PATH$)
  320.     PROG.NAME$ = RTRIM$(PROG.NAME$)
  321.     SUB.PATH$ = RTRIM$(SUB.PATH$)
  322.     PRINTER$ = RTRIM$(PRINTER$)
  323.     OPEN AMPARM$ FOR OUTPUT AS #1
  324.     WRITE #1, SYS.PATH$, PAT.PATH$, APT.PATH$, ACT.PATH$, PROG.NAME$, fc%, bc%, SUB.PATH$, PRINTER$, ver$
  325.     CLOSE #1
  326. RETURN
  327.  
  328.  
  329. 65 '
  330. read.parm:
  331.     AMPARM$ = "AMPARM.DAT"
  332.     OPEN AMPARM$ FOR INPUT AS #1
  333.     INPUT #1, SYS.PATH$, PAT.PATH$, APT.PATH$, ACT.PATH$, PROG.NAME$, fc%, bc%, SUB.PATH$, PRINTER$, ver$
  334.     CLOSE #1
  335.     IF PRINTER$ = "" OR LEN(PRINTER$) < 5 THEN prnfile$ = "AMPRINT.DAT" ELSE
  336.     IF PRINTER$ = "APPLE DMP" THEN prnfile$ = "APPLE.PRN" ELSE
  337.     IF PRINTER$ = "TOSHIBA P1340" THEN prnfile$ = "TOSH1340.PRN" ELSE
  338.     IF PRINTER$ = "FX 100" THEN prnfile$ = "FX100.PRN" ELSE
  339.     IF PRINTER$ = "FX 80" THEN prnfile$ = "FX80.PRN" ELSE
  340.     IF PRINTER$ = "C-ITOH" THEN prnfile$ = "CITOH.PRN" ELSE
  341.     prnfile$ = LEFT$(PRINTER$, 5) + ".PRN"
  342.        
  343.     GOSUB read.prnfile
  344.        
  345.     RETURN
  346. parm.trap:
  347.     CLS : fc% = 15: bc% = 0
  348.     center 12, "AMPARM.DAT File Missing"
  349.     center 14, "Create NEW File (Y-N)"
  350.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  351.     IF KY$ = "N" THEN RETURN
  352.     DRV$ = "x:": CALL GETDRV(DRV$)
  353.     DRV$ = DRV$ + "\"
  354.     SUB$ = STRING$(64, 0)
  355.     CALL GETSUB(SUB$, slen%)
  356.     SUB$ = "\" + LEFT$(SUB$, slen%)
  357.     CALL stripblanks(SUB$, 3, slen%)
  358.     SUB$ = LEFT$(SUB$, slen%)
  359.     SYS.PATH$ = DRV$: SUB.PATH$ = SUB$: PAT.PATH$ = DRV$ + "CLIENT\": APT.PATH$ = DRV$ + "APPOINT\": ACT.PATH$ = DRV$ + "CLIENT\"
  360.     PRINTER$ = "APPLE DMP": PROG.NAME$ = "Program Practice Name": ver$ = "Series 8.0": fc% = 15: bc% = 0
  361.     AMPARM$ = "AMPARM.DAT"
  362.     SYS.PATH$ = RTRIM$(SYS.PATH$)
  363.     PAT.PATH$ = RTRIM$(PAT.PATH$)
  364.     APT.PATH$ = RTRIM$(APT.PATH$)
  365.     ACT.PATH$ = RTRIM$(ACT.PATH$)
  366.     PROG.NAME$ = RTRIM$(PROG.NAME$)
  367.     SUB.PATH$ = RTRIM$(SUB.PATH$)
  368.     PRINTER$ = RTRIM$(PRINTER$)
  369.     OPEN AMPARM$ FOR OUTPUT AS #1
  370.     WRITE #1, SYS.PATH$, PAT.PATH$, APT.PATH$, ACT.PATH$, PROG.NAME$, fc%, bc%, SUB.PATH$, PRINTER$, ver$
  371.     CLOSE #1
  372.     
  373.     RETURN
  374.  
  375. 70 '
  376. printer.install:
  377. GOSUB read.prnfile
  378. CLS : nochange = 0
  379. LABEL$ = "Select Printers"
  380. CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  381.  
  382.     a$ = "The following printers are supported:"
  383.     CALL center(6, a$)
  384. pimenu:
  385.        
  386.     m$(1) = "APPLE DOT MATRIX"
  387.     m$(2) = "C-ITOH DOT MATRIX"
  388.     m$(3) = "EPSON FX 80 DMP"
  389.     m$(4) = "EPSON FX 100 DMP"
  390.     m$(5) = "TOSHIBA P1340 HDMP"
  391.     m$(6) = "HP LASER JET II"
  392.     m$(7) = "Reserved"
  393.     m$(8) = "CUSTOM Printer CODES"
  394.     m$(9) = "EXIT To Main Menu"
  395.  
  396. np = 9
  397. fc = FC2%: bc = BC2%
  398. CALL menu(fc, bc, bc, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  399.  
  400. a = CH
  401. response:
  402.     IF a = 27 THEN RETURN
  403.     IF a = 1 THEN PRINTER$ = "APPLE DMP": GOSUB prnfile: GOTO printer.install
  404.     IF a = 2 THEN PRINTER$ = "C-ITOH": GOSUB prnfile: GOTO printer.install
  405.     IF a = 3 THEN PRINTER$ = "FX 80": GOSUB prnfile: GOTO printer.install
  406.     IF a = 4 THEN PRINTER$ = "FX 100": GOSUB prnfile: GOTO printer.install
  407.     IF a = 5 THEN PRINTER$ = "TOSHIBA P1340": GOSUB prnfile: GOTO printer.install
  408.     IF a = 6 THEN PRINTER$ = "HPLJII": GOSUB prnfile: GOTO printer.install
  409.     IF a = 7 THEN PRINTER$ = "": GOTO printer.install
  410.     IF a = 8 THEN GOSUB custprncodes: GOTO printer.install
  411.     IF a = 9 THEN RETURN
  412.     
  413. prnfile:
  414.     CLS
  415.     IF PRINTER$ = "APPLE DMP" THEN prnfile$ = "APPLE.PRN"
  416.     IF PRINTER$ = "TOSHIBA P1340" THEN prnfile$ = "TOSH1340.PRN"
  417.     IF PRINTER$ = "FX 100" THEN prnfile$ = "FX100.PRN"
  418.     IF PRINTER$ = "FX 80" THEN prnfile$ = "FX80.PRN"
  419.     IF PRINTER$ = "C-ITOH" THEN prnfile$ = "CITOH.PRN"
  420.     IF PRINTER$ = "HPLJII" THEN prnfile$ = "HPLJII.PRN"
  421.     IF PRINTER$ = "" THEN prnfile$ = "AMPRINT.DAT"
  422.     
  423.     GOSUB custprncodes
  424.     IF nochange = 1 THEN RETURN ELSE
  425.     GOSUB write.parm: RETURN
  426. RETURN
  427. read.prnfile:
  428. 100 '
  429.     QUOTE$ = CHR$(34)
  430.     IF PRINTER$ = "APPLE DMP" THEN prnfile$ = "APPLE.PRN"
  431.     IF PRINTER$ = "TOSHIBA P1340" THEN prnfile$ = "TOSH1340.PRN"
  432.     IF PRINTER$ = "FX 100" THEN prnfile$ = "FX100.PRN"
  433.     IF PRINTER$ = "FX 80" THEN prnfile$ = "FX80.PRN"
  434.     IF PRINTER$ = "C-ITOH" THEN prnfile$ = "CITOH.PRN"
  435.     IF PRINTER$ = "HPLJII" THEN prnfile$ = "HPLJII.PRN"
  436.     IF PRINTER$ = "" THEN prnfile$ = "AMPRINT.DAT"
  437.     OPEN prnfile$ FOR INPUT AS #1
  438.     INPUT #1, PRINTER$, ESC$, INIT.PTR$, SET.TABS$, condensed.on$, condensed.off$, bold.on$, bold.off$, elongate.on$, elongate.off$, underline.on$, underline.off$, HT$, TAB.STR$
  439.     CLOSE #1
  440.     TAB.STR$ = SET.TABS$
  441.     FOR L% = 1 TO LEN(SET.TABS$)
  442.         I = INSTR(SET.TABS$, "/")
  443.         IF I THEN MID$(SET.TABS$, I) = ","
  444.     NEXT L%
  445.     
  446.     RETURN
  447.  
  448. prn.trap:
  449.     CLS
  450.     center 12, "Printer Files Not Found"
  451.     center 13, "Check for .PRN Files"
  452.     CALL delay(2)
  453.     RETURN
  454.  
  455. build:
  456.     RETURN
  457. custprncodes:
  458.     CLS
  459. LABEL$ = "Custom code entry"
  460. GOSUB read.prnfile
  461. CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  462. overlay3:
  463.     LOCATE 6, 5: PRINT "Printer Name  :"; PRINTER$;
  464.     LOCATE 7, 5: PRINT "Escape Code   :"; ESC$;
  465.     LOCATE 8, 5: PRINT "Initialize    :"; INIT.PTR$;
  466.     LOCATE 9, 5: PRINT "Set Tabs      :"; SET.TABS$;
  467.     LOCATE 10, 5: PRINT "Condensed On  :"; condensed.on$;
  468.     LOCATE 11, 5: PRINT "Condensed Off :"; condensed.off$;
  469.     LOCATE 12, 5: PRINT "Bold On       :"; bold.on$;
  470.     LOCATE 13, 5: PRINT "Bold Off      :"; bold.off$;
  471.     LOCATE 14, 5: PRINT "Elongate On   :"; elongate.on$;
  472.     LOCATE 15, 5: PRINT "Elongate Off  :"; elongate.off$;
  473.     LOCATE 16, 5: PRINT "Underline On  :"; underline.on$;
  474.     LOCATE 17, 5: PRINT "Underline Off :"; underline.off$;
  475.     LOCATE 18, 5: PRINT "Horizontal Tab:"; HT$;
  476.     LOCATE 19, 5: PRINT "Tab String    :"; TAB.STR$
  477. 'center 24, RTRIM$(SET.TABS$) + RTRIM$(TAB.STR$)
  478.     
  479. bac:
  480.     a$ = "ESCape to exit or press Any Key to Edit": CALL center(23, a$)
  481.     
  482.     a$ = INKEY$: IF a$ = "" THEN GOTO bac ELSE a = ASC(a$)
  483.     IF a = 27 THEN RETURN
  484.     GOSUB prnfile.input: RETURN
  485. prnfile.input:
  486.     a$ = "WRITE NEW PRINTER COMMANDS"
  487.     CALL center(2, a$)
  488.     FL = 55: J2 = 6: item2% = J2 - 5
  489.         
  490. getiton2:
  491.          
  492.          LOCATE J2, 20
  493.          QX = POS(0): QY = CSRLIN
  494.          FOR x = QX TO QX + FL
  495.         LETTER$ = CHR$(SCREEN(QY, x))
  496.         PROMPT$ = PROMPT$ + LETTER$
  497.          NEXT x
  498.         item2% = J2 - 5
  499.          PRI$(item2%) = PROMPT$
  500.          LOCATE J2, 20
  501.          GOSUB joekey
  502.  
  503.          IF NOT MOVE.IT THEN GOTO chngit2
  504.  
  505.     IF KY = UP.CURSOR THEN GOTO uparrow2
  506.     IF KY = DN.CURSOR THEN GOTO dnarrow2
  507.     IF KY = PG.UP THEN J2 = 6: GOSUB saveasis2: GOTO getiton2
  508.     IF KY = PG.DN THEN J2 = 19: GOSUB saveasis2: GOTO getiton2
  509.     IF KY = ESC THEN nochange = 1: RETURN
  510.  
  511. chngit2: IF in$ <> "" THEN PRI$(item2%) = in$ ELSE PRI$(item2%) = PROMPT$
  512.     IF J2 < 19 THEN J2 = J2 + 1:  GOTO getiton2
  513.     GOSUB write.prnfile: RETURN
  514.  
  515. uparrow2:
  516.  
  517.     J2 = J2 + (J2 > 6): GOTO getiton2
  518.  
  519. dnarrow2:
  520.  
  521.     J2 = J2 - (J2 < 19): GOTO getiton2
  522.        
  523. saveasis2:
  524.     LETTER$ = "": item2% = 1
  525.     FOR v2 = 6 TO 19
  526.         PRI$(item2%) = ""
  527.         LOCATE v2, 20
  528.         QX = POS(0): QY = CSRLIN
  529.  
  530.         FL = 55
  531.             FOR x = QX TO QX + FL
  532.                 LETTER$ = CHR$(SCREEN(QY, x))
  533.                 PRI$(item2%) = PRI$(item2%) + LETTER$
  534.             NEXT x
  535.             LETTER$ = ""
  536.     item2% = item2% + 1
  537.     NEXT v2
  538.     
  539.     RETURN
  540.  
  541.  
  542.  
  543. 105 '
  544. write.prnfile:
  545.        
  546.     PRINTER$ = RTRIM$(PRI$(1))
  547.     ESC$ = RTRIM$(PRI$(2))
  548.     INIT.PTR$ = RTRIM$(PRI$(3))
  549.     SET.TABS$ = RTRIM$(PRI$(4))
  550.     condensed.on$ = RTRIM$(PRI$(5))
  551.     condensed.off$ = RTRIM$(PRI$(6))
  552.     bold.on$ = RTRIM$(PRI$(7))
  553.     bold.off$ = RTRIM$(PRI$(8))
  554.     elongate.on$ = RTRIM$(PRI$(9))
  555.     elongate.off$ = RTRIM$(PRI$(10))
  556.     underline.on$ = RTRIM$(PRI$(11))
  557.     underline.off$ = RTRIM$(PRI$(12))
  558.     HT$ = RTRIM$(PRI$(13))
  559.     TAB.STR$ = RTRIM$(PRI$(14))
  560.     
  561.     OPEN prnfile$ FOR OUTPUT AS #1
  562.     WRITE #1, PRINTER$, ESC$, INIT.PTR$, SET.TABS$, condensed.on$, condensed.off$, bold.on$, bold.off$, elongate.on$, elongate.off$, underline.on$, underline.off$, HT$, TAB.STR$
  563.     CLOSE #1
  564. RETURN
  565. new.prnfile:
  566.     GOSUB prnfile.input: GOSUB write.prnfile: GOSUB custprncodes: RETURN
  567.  
  568. 110 '
  569. treatment.code:
  570.     LABEL$ = "Edit Treatment Codes"
  571.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  572.     COLOR bc%, fc%
  573.     LOCATE 5, 6: PRINT " # | CODE ID | PROCEDURE ";
  574.     LOCATE 5, 45: PRINT " # | CODE ID | PROCEDURE ";
  575.     COLOR fc%, bc%
  576.        
  577. code.disp:
  578.     v = 7: COLOR fc%, bc%
  579.     FOR c = 1 TO 12
  580.         LOCATE v, 7: PRINT c; "   "; AC$(c); "   "; TC$(c);
  581.         v = v + 1
  582.     NEXT c
  583.     v = 7
  584.     FOR c = 13 TO 25
  585.         LOCATE v, 46: PRINT c; "   "; AC$(c); "   "; TC$(c);
  586.         v = v + 1
  587.     NEXT c
  588.     a$ = "Edit Treatment Codes Y-N": center 23, a$
  589.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  590.     IF KY$ = "N" THEN RETURN
  591.     IF KY$ = "Y" THEN GOSUB edit.treatcodes: RETURN
  592.  
  593. edit.treatcodes:
  594.     GOSUB read.tc.ovl: COLOR fc%, bc%
  595.     POOF$ = STRING$(55, 32): center 12, POOF$: center 23, POOF$
  596.     CALL makewindow(10, 10, 70, 14, "Edit Codes", 1, 3, bc%, fc%, page%)
  597.     COLOR bc%, fc%
  598.     LOCATE 12, 12: INPUT "Enter Treatment Code Number "; tcn%
  599.     IF tcn% < 1 OR tcn% > 25 THEN SOUND 100, 2: GOTO treatment.code
  600.     center 12, POOF$
  601.     center 14, "Currently = " + AC$(tcn%) + " " + TC$(tcn%)
  602.     LOCATE 12, 12: INPUT "Enter NEW Letter Code I.D. "; AC$
  603.     IF AC$ = "" THEN GOTO treatment.code
  604.     AC$ = UCASE$(AC$)
  605.     aclen% = LEN(AC$)
  606.     IF aclen% > 3 THEN AC$ = LEFT$(AC$, 3)
  607.     AC$(tcn%) = AC$
  608.     center 12, POOF$
  609.     LOCATE 12, 12: INPUT "Enter NEW Procedure "; TC$
  610.     IF TC$ = "" THEN GOTO treatment.code
  611.     TC$ = LCASE$(TC$)
  612.     tclen% = LEN(TC$)
  613.     IF tclen% > 10 THEN TC$ = LEFT$(TC$, 10)
  614.     TC$ = "(" + TC$ + ")"
  615.     TC$(tcn%) = TC$
  616.     LABEL$ = "Edit Treatment Codes"
  617.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, 0, fc%, bc%, page%)
  618.     COLOR bc%, fc%
  619.     LOCATE 5, 6: PRINT " # | CODE ID | PROCEDURE ";
  620.     LOCATE 5, 45: PRINT " # | CODE ID | PROCEDURE ";
  621.     COLOR fc%, bc%
  622.     v = 7
  623.     FOR c = 1 TO 12
  624.         LOCATE v, 7: PRINT c; "   "; AC$(c); "   "; TC$(c);
  625.         v = v + 1
  626.     NEXT c
  627.     v = 7
  628.     FOR c = 13 TO 25
  629.         LOCATE v, 46: PRINT c; "   "; AC$(c); "   "; TC$(c);
  630.         v = v + 1
  631.     NEXT c
  632.       
  633. write.tc.ovl:
  634.          tcovl$ = "TC.OVL"
  635.          OPEN tcovl$ FOR OUTPUT AS #1
  636.  
  637.        
  638.          FOR L% = 1 TO 25
  639.         WRITE #1, AC$(L%), TC$(L%)
  640.          NEXT L%
  641.          CLOSE #1
  642.       
  643.       
  644.     center 23, POOF$
  645.     center 23, "Another Y-N"
  646.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  647.     IF KY$ = "Y" THEN GOTO edit.treatcodes
  648.     COLOR fc%, bc%
  649.     RETURN
  650.  
  651. read.tc.ovl:
  652.          tcovl$ = "TC.OVL"
  653.          OPEN tcovl$ FOR INPUT AS #1
  654.          FOR L% = 1 TO 25
  655.         INPUT #1, AC$(L%), TC$(L%)
  656.          NEXT L%
  657.          CLOSE #1
  658.          RETURN
  659.     
  660. tcovl.trap:
  661.     CLS
  662.     center 12, "Treatment Code File TC.OVL Not Found"
  663.     CALL delay(1)
  664.     center 13, "Creating New TC.OVL File Now"
  665.          tcovl$ = "TC.OVL"
  666.          OPEN tcovl$ FOR OUTPUT AS #1
  667.          FOR L% = 1 TO 25
  668.         WRITE #1, AC$(L%), TC$(L%)
  669.          NEXT L%
  670.          CLOSE #1
  671.  
  672.     GOTO edit.treatcodes
  673.  
  674. 150 '
  675. recall.code:
  676.     LABEL$ = "Edit Recall Codes"
  677.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  678.     COLOR bc%, fc%
  679.     LOCATE 6, 6: PRINT " # | CODE ID | DESCRIPTION ";
  680.     LOCATE 6, 45: PRINT " # | CODE ID | DESCRIPTION ";
  681.     COLOR fc%, bc%
  682.       
  683. rccode.disp:
  684.     v = 8: COLOR fc%, bc%
  685.     FOR c = 1 TO 12
  686.         LOCATE v, 7: PRINT c; "   "; RCC$(c); "   "; RC$(c);
  687.         v = v + 1
  688.     NEXT c
  689.     v = 8
  690.     FOR c = 13 TO 24
  691.         LOCATE v, 46: PRINT c; "   "; RCC$(c); "   "; RC$(c);
  692.         v = v + 1
  693.     NEXT c
  694.     a$ = "Edit Recall Codes Y-N": center 23, a$
  695.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  696.     IF KY$ = "N" THEN RETURN
  697.     IF KY$ = "Y" THEN GOSUB edit.rccodes: RETURN
  698.  
  699. edit.rccodes:
  700.     GOSUB read.rc.ovl: COLOR fc%, bc%
  701.     POOF$ = STRING$(55, 32): center 12, POOF$: center 23, POOF$
  702.     CALL makewindow(10, 10, 70, 14, "Edit Codes", 1, 3, bc%, fc%, page%)
  703.     COLOR bc%, fc%
  704.     LOCATE 12, 12: INPUT "Enter Recall Code Number "; tcn%
  705.     IF tcn% < 1 OR tcn% > 24 THEN SOUND 100, 2: GOTO recall.code
  706.     center 12, POOF$
  707.     center 14, "Currently = " + RCC$(tcn%) + " " + RC$(tcn%)
  708.     LOCATE 12, 12: INPUT "Enter NEW Letter Code I.D. "; RCC$
  709.     IF RCC$ = "" THEN GOTO recall.code
  710.     RCC$ = UCASE$(RCC$)
  711.     rclen% = LEN(RCC$)
  712.     IF rclen% > 3 THEN RCC$ = LEFT$(RCC$, 3)
  713.     RCC$(tcn%) = RCC$
  714.     center 12, POOF$
  715.     LOCATE 12, 12: INPUT "Enter NEW Description "; RC$
  716.     IF RC$ = "" THEN GOTO recall.code
  717.     RC$ = UCASE$(RC$)
  718.     rclen% = LEN(RC$)
  719.     IF rclen% > 15 THEN RC$ = LEFT$(RC$, 15)
  720.     RC$(tcn%) = RC$
  721.     LABEL$ = "Edit Recall Codes"
  722.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, 0, fc%, bc%, page%)
  723.     COLOR bc%, fc%
  724.     LOCATE 6, 6: PRINT " # | CODE ID | DESCRIPTION ";
  725.     LOCATE 6, 45: PRINT " # | CODE ID | DESCRIPTION ";
  726.     COLOR fc%, bc%
  727.     v = 8
  728.     FOR c = 1 TO 12
  729.         LOCATE v, 7: PRINT c; "   "; RCC$(c); "   "; RC$(c);
  730.         v = v + 1
  731.     NEXT c
  732.     v = 8
  733.     FOR c = 13 TO 24
  734.         LOCATE v, 46: PRINT c; "   "; RCC$(c); "   "; RC$(c);
  735.         v = v + 1
  736.     NEXT c
  737.      
  738. write.rc.ovl:
  739.          rcovl$ = "RC.OVL"
  740.          OPEN rcovl$ FOR OUTPUT AS #1
  741.          FOR L% = 1 TO 24
  742.         WRITE #1, RCC$(L%), RC$(L%)
  743.          NEXT L%
  744.          CLOSE #1
  745.      
  746.      
  747.     center 23, POOF$
  748.     center 23, "Another Y-N"
  749.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  750.     IF KY$ = "Y" THEN GOTO edit.rccodes
  751.     COLOR fc%, bc%
  752.     RETURN
  753.  
  754. read.rc.ovl:
  755.          rcovl$ = "RC.OVL"
  756.          OPEN rcovl$ FOR INPUT AS #1
  757.          FOR L% = 1 TO 24
  758.         INPUT #1, RCC$(L%), RC$(L%)
  759.          NEXT L%
  760.          CLOSE #1
  761.          RETURN
  762.        
  763. rcovl.trap:
  764.     CLS
  765.     center 12, "Recall Code File RC.OVL Not Found"
  766.     CALL delay(1)
  767.     center 13, "Creating New RC.OVL File Now"
  768.          rcovl$ = "RC.OVL"
  769.          OPEN rcovl$ FOR OUTPUT AS #1
  770.          FOR L% = 1 TO 24
  771.         WRITE #1, RCC$(L%), RC$(L%)
  772.          NEXT L%
  773.          CLOSE #1
  774.  
  775.     GOTO edit.rccodes
  776.  
  777.  
  778. 200 'todate
  779. 201 '
  780.  
  781.  
  782.  
  783.      TODAY.DATE$ = DATE$: TODAY.MONTH% = VAL(LEFT$(TODAY.DATE$, 2))
  784.      MONTH.TP% = TODAY.MONTH%
  785.      TODAY.DAY% = VAL(MID$(TODAY.DATE$, 4, 2))
  786.      DAY.TP$ = STR$(TODAY.DAY%): DAY.TP% = TODAY.DAY%
  787.      TODAY.YEAR% = VAL(RIGHT$(TODAY.DATE$, 2))
  788.      YEAR.TP% = TODAY.YEAR%
  789.      YEAR.TP$ = STR$(YEAR.TP%)
  790.      GOSUB 30350 'Pull BASIC LIB for run
  791.      TODAY.DATE.STR$ = DATE.STR.TP$
  792.      TODAY.DC% = DC: TODAY.MAX.DAYS% = MAX.DAYS%
  793.      RETURN
  794.  
  795. 300 'Center
  796.      CALL center(v, a$): RETURN
  797. 350 'Option
  798.     LOCATE 12, 30: COLOR 0, 14: PRINT "OPTION NOT AVAILABLE"; : COLOR fc%, bc%: FOR L = 1 TO 1500: NEXT L: LOCATE 25, 1: PRINT CLR$; : RETURN
  799. 385 '
  800. 390 'Numeric
  801. 395 '
  802. 400 num.err% = 0: FOR LOUP = 1 TO LEN(IN.STRING$): a = ASC(MID$(IN.STRING$, LOUP, 1)): IF a < 48 OR a > 57 THEN num.err% = 1: RETURN
  803. 402 NEXT LOUP: IN.NUM% = VAL(LEFT$(IN.STRING$, 4)): RETURN
  804. 403 '
  805. 490 'String
  806.  
  807. IN.STRING$ = "": in.line% = CSRLIN: IN.COLUMN% = POS(0)
  808. 510 COLOR fc% + 16, bc%: PRINT CHR$(16); : COLOR fc%, bc%
  809. 520 a$ = INKEY$: IF a$ = "" THEN 520 ELSE a = ASC(a$)
  810.     IF a = 27 THEN 600
  811.     IF a = 8 THEN GOSUB 640: GOTO 520
  812.     IF a = 13 THEN LOCATE CSRLIN, POS(0) - 1: COLOR fc%, bc%: PRINT " "; : RETURN
  813.     IF a < 32 OR a > 126 THEN BEEP: GOTO 520
  814.     IF POS(0) - 1 THEN LOCATE CSRLIN, POS(0) - 1
  815.     PRINT a$; : IN.STRING$ = IN.STRING$ + a$: GOTO 510
  816. 600 '[ESC] KEY
  817. 610 IF IN.STRING$ = "" THEN LOCATE CSRLIN, POS(0) - 1: PRINT "  "; : RETURN
  818. 620 LOCATE in.line%, IN.COLUMN%: PRINT SPACE$(LEN(IN.STRING$) + 1); : LOCATE in.line%, IN.COLUMN%: IN.STRING$ = "": GOTO 510
  819. 640 ' BACKSPACE
  820. 650 IF IN.STRING$ = "" THEN BEEP: RETURN
  821. 660 IN.STRING$ = LEFT$(IN.STRING$, LEN(IN.STRING$) - 1): LOCATE CSRLIN, POS(0) - 2: PRINT "  "; : LOCATE CSRLIN, POS(0) - 2: COLOR fc% + 16, bc%: PRINT CHR$(16); : COLOR fc%, bc%: RETURN
  822.  
  823. tyme:
  824. 700 CALL tyme
  825.     RETURN
  826.  
  827. 1000 'INKEY
  828. 1010 a$ = INKEY$: IF a$ = "" THEN 1010 ELSE a = ASC(a$): RETURN
  829.  
  830. 4000 '
  831. main.menu:
  832. GOSUB 200
  833. FC2% = fc%: BC2% = bc%
  834. Second.title$ = "SETUP AND MAINTENANCE"
  835. bottom.msg$ = ver$
  836.  
  837. '
  838. first.menu:
  839.     m$(1) = "SET UP AND MAINTENANCE"
  840.     m$(2) = "FILE / DISK UTILITIES"
  841.     m$(3) = "PRINTER INSTALLATION"
  842.     m$(4) = "APPOINTMENTS MODULE"
  843.     m$(5) = "ACCOUNTS RECEIVABLE"
  844.     m$(6) = "EXIT TO DOS"
  845.     
  846. 4001 ' Redraw
  847. np = 6
  848. COLOR fc%, bc%
  849. CLS
  850. LABEL$ = "Main Menu"
  851. CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, 4, 2, fc%, bc%, page%)
  852. CALL center(2, "QBUDDY SYSTEMS") 'Prints the first menu title
  853. CALL center(3, Second.title$)
  854.  
  855. CALL center(23, bottom.msg$)
  856.  
  857. CALL getcrt(colordisp%)
  858. IF colordisp% THEN LOCATE 24, 8: PRINT "";  ELSE LOCATE 24, 9: PRINT "Mono";
  859. CALL getdosv(maj%, min%)
  860. CALL getkbd(INSERT%, capslock%, numlocl%, scrolock%)
  861. IF capslock% THEN LOCATE 24, 56: PRINT "CAPS";
  862. IF numlocl% THEN LOCATE 24, 50: PRINT "NUM";
  863. IF scrolock% THEN LOCATE 25, 56: PRINT "SCRL";
  864. fc = fc%: bc = bc%
  865. CALL menu(fc, bc, bc, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  866. IF INSERT% THEN LOCATE 25, 50: PRINT "INS";
  867.  
  868. CLS
  869. a = CH
  870.      IF a = 1 THEN GOSUB set.up: GOTO main.menu
  871.      IF a = 2 THEN GOSUB file.utilities: GOTO main.menu
  872.      IF a = 3 THEN GOSUB printer.install: GOTO main.menu
  873.      IF a = 4 THEN GOTO main.menu
  874.      IF a = 5 THEN GOTO main.menu
  875.      IF a = 6 THEN RETURN
  876.        
  877. file.utilities:
  878.     LABEL$ = " Utilities ": POOF$ = STRING$(60, 32): center 23, POOF$
  879.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, 4, 2, fc%, bc%, page%)
  880.     center 2, "QBUDDY SYSTEMS"
  881.     m$(1) = "SCAN DIRECTORY"
  882.     m$(2) = "READ TEXT FILES"
  883.     m$(3) = "COPY FILES"
  884.     m$(4) = "BACK UP DATA FILES"
  885.     m$(5) = "MAIN MENU"
  886. np = 5
  887.     CALL menu(fc, bc, bc, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  888.     
  889.  
  890. a = CH
  891.  
  892.     IF a = 1 THEN GOSUB dirscan: GOTO file.utilities
  893.     IF a = 2 THEN GOSUB readafile: GOTO file.utilities
  894.     IF a = 3 THEN GOSUB copy.files: GOTO file.utilities
  895.     IF a = 4 THEN GOSUB backups: GOTO file.utilities
  896.     IF a = 5 THEN RETURN
  897.  
  898. copy.files:
  899.     CLS : LABEL$ = " Copy Files ": SOURCE$ = "": DEST$ = "": POOF$ = STRING$(55, 32)
  900.     CALL makewindow(10, 10, 70, 14, LABEL$, 1, 3, bc%, fc%, page%)
  901.     COLOR bc%, fc%
  902.     center 12, POOF$: center 13, POOF$
  903.     LOCATE 12, 12: INPUT "Enter path and name of the source file "; SOURCE$
  904.     IF SOURCE$ = "" THEN COLOR fc%, bc%: RETURN
  905.     SOURCE$ = UCASE$(SOURCE$)
  906.     FIL$ = SOURCE$ + CHR$(0)
  907.     CALL findfirstf(FIL$, 0, ERCD%)
  908.     IF ERCD% THEN GOTO no.source ELSE
  909. pathfinder:
  910.     center 13, POOF$
  911.     LOCATE 13, 12: INPUT "Enter path and name of destination file "; DEST$
  912.     IF DEST$ = "" THEN RETURN
  913.     DEST$ = UCASE$(DEST$): DRV$ = LEFT$(DEST$, 1) + ":"
  914.     a$ = LEFT$(DRV$, 1): a = ASC(a$)
  915.     IF a < 65 OR a > 68 THEN GOTO invalid.drv
  916.     CALL stripblanks(DRV$, 3, slen%)
  917.     DRV$ = LEFT$(DRV$, slen%)
  918.     CALL drvspace(DRV$, a%, b%, c%)
  919.     free# = CDBL(a%) * CDBL(b%) * CDBL(c%)
  920.     a$ = "Free Space on Destination Drive " + DRV$ + " is" + STR$(free#) + " bytes."
  921.     COLOR bc%, fc%: center 10, a$: COLOR fc%, bc%
  922.     FIL$ = DEST$ + CHR$(0)
  923.     CALL exist(FIL$, filexists%)
  924.     IF filexists% THEN GOTO overwrite
  925.     center 12, POOF$
  926.     center 13, POOF$
  927.     center 12, "Copy " + SOURCE$ + " to " + DEST$
  928.     center 14, POOF$
  929.     center 14, "Correct ? (Y-N-E-xit)"
  930.     ALLOW$ = "YNE": KY$ = "x": CALL getkey(ALLOW$, KY$)
  931.     IF KY$ = "N" THEN GOTO copy.files
  932.     IF KY$ = "E" THEN COLOR fc%, bc%: RETURN
  933.     IF KY$ = "Y" THEN GOTO copy.it
  934.  
  935. no.source:
  936.     center 11, "Source File Does Not Exist"
  937.     CALL delay(2)
  938.     center 11, POOF$
  939.     GOTO copy.files
  940. overwrite:
  941.     COLOR bc%, fc%
  942.     center 14, POOF$
  943.     COLOR fc%, bc%: center 14, "File Exists...Overwrite (Y-N)": COLOR bc%, fc%
  944.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  945.     IF KY$ = "N" THEN GOTO pathfinder
  946.     IF KY$ = "Y" THEN GOTO copy.it
  947.  
  948. copy.it:
  949.  
  950.     SOURCE$ = SOURCE$ + CHR$(0): DEST$ = DEST$ + CHR$(0)
  951.     ERCD% = 0
  952.     CALL copyfile(SOURCE$, DEST$, ERCD%)
  953.     IF ERCD% THEN GOTO fail.copy
  954.     COLOR fc%, bc%
  955.     RETURN
  956. fail.copy:
  957.     center 23, "The copy failed. Try again."
  958.     CALL delay(1)
  959.     GOTO copy.files
  960.  
  961. invalid.drv:
  962.     SOUND 100, 2
  963.     center 23, "You entered an invalid drive specification"
  964.     center 24, "Acceptable drives are A-B-C-D"
  965.     CALL delay(3)
  966.     center 23, POOF$: center 24, POOF$
  967.     GOTO pathfinder
  968.  
  969.  
  970. backups:
  971. LABEL$ = " Archival Backups APPOINTMENT DATA FILES "
  972. CALL makewindow(10, 10, 70, 14, " BACK UP ", 1, 3, bc%, fc%, page%)
  973. CALL center(2, "QBUDDY SYSTEMS"): POOF$ = STRING$(70, 32)
  974.     POOF$ = STRING$(50, 32)
  975.     center 5, "This command is exactly like the DOS COPY command."
  976.     center 6, "It will copy OVER existing files and destroy them."
  977.     center 7, "The Files are compressed to conserve disk space."
  978. COLOR fc% + 16, bc%: center 17, "*** CAUTION ***": COLOR fc%, bc%: center 18, "APPOINTMENT BACKUP FLOPPY DISK"
  979.     center 19, "Be sure you place the correct floppy disk in drive A"
  980.     center 20, "and close the door."
  981.     center 21, "Choose N(o) to EXIT"
  982.     COLOR bc%, fc%
  983.     center 12, POOF$: center 13, POOF$
  984.     center 12, "Backup APPOINTMENT files to Drive A"
  985.     center 14, "(Y-N)"
  986.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  987.     IF KY$ = "Y" THEN GOSUB aptfile.backup: COLOR fc%, bc%: RETURN
  988.     IF KY$ = "N" THEN GOSUB patbak: COLOR fc%, bc%: RETURN
  989.  
  990. aptfile.backup:
  991.     SOURCE$ = APT.PATH$ + "*.*": DEST$ = "A:\"
  992.     DOS.CMD$ = "COPY " + SOURCE$ + " " + DEST$
  993.     COLOR 7, 0
  994.     CLS : LOCATE 1, 1
  995.     PRINT "SHELL TO DOS - Copying APPOINTMENT files to Drive A";
  996.     LOCATE 3, 1
  997.     SHELL DOS.CMD$
  998.     COLOR fc%, bc%: CLS
  999. 'RETURN
  1000. patbak:
  1001. LABEL$ = " Archival Backups CLIENT DATA FILES "
  1002. CALL makewindow(10, 10, 70, 14, " BACK UP ", 1, 3, bc%, fc%, page%)
  1003. CALL center(2, "QBUDDY SYSTEMS")
  1004. COLOR fc% + 16, bc%: center 17, "*** CAUTION ***": COLOR fc%, bc%: center 18, "CLIENT FILE BACKUP FLOPPY DISK"
  1005.     SOUND 100, 1
  1006.     COLOR bc%, fc%
  1007.     center 12, POOF$: center 13, POOF$
  1008.     center 12, "Backup CLIENT files to Drive A"
  1009.     center 14, "(Y-N)"
  1010.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  1011.     IF KY$ = "Y" THEN GOSUB patfile.backup: RETURN
  1012.     IF KY$ = "N" THEN COLOR fc%, bc%: RETURN
  1013.  
  1014. patfile.backup:
  1015.     SOURCE$ = PAT.PATH$ + "*.*": DEST$ = "A:\"
  1016.     DOS.CMD$ = "COPY " + SOURCE$ + " " + DEST$
  1017.     COLOR 7, 0
  1018.     CLS : LOCATE 1, 1
  1019.     PRINT "SHELL TO DOS - Copying CLIENT files to Drive A";
  1020.     LOCATE 3, 1
  1021.     SHELL DOS.CMD$
  1022.     COLOR fc%, bc%
  1023.     RETURN
  1024.  
  1025. dirscan:
  1026.     faccess% = 2: fmode% = 2: handle% = 1
  1027.     CALL infile(PAT.PATH$, APT.PATH$, inflg%, FILENAME$, fc%, bc%, SYS.PATH$, ERCD%, handle%, faccess%, fmode%, SUB.PATH$)
  1028.     a$ = STRING$(75, 32): center 23, a$
  1029.     a$ = "Press any key": center 23, a$
  1030.     CLS : RETURN
  1031.  
  1032.  
  1033. readafile:
  1034.     LABEL$ = "Read Text File"
  1035.     CALL makewindow(10, 10, 70, 14, LABEL$, 1, 3, bc%, fc%, page%)
  1036.     COLOR bc%, fc%
  1037.     LOCATE 12, 12: INPUT "Enter complete path/filespec "; FILENAME$
  1038.     IF FILENAME$ = "" THEN COLOR fc%, bc%: RETURN
  1039.     FILENAME$ = UCASE$(FILENAME$)
  1040.     FIL$ = FILENAME$ + CHR$(0)
  1041.     CALL exist(FIL$, exists%)
  1042.     IF exists% THEN GOTO read.it
  1043. trap.it:
  1044.     POOF$ = STRING$(55, 32): SOUND 100, 2: COLOR bc%, fc%
  1045.     center 12, POOF$
  1046.     center 10, "Be Sure To Enter COMPLETE path (C:\FileName.Ext)"
  1047.     center 12, "This File Not Found " + STRING$(3, 247) + CHR$(16) + " " + FILENAME$
  1048.     center 14, "Try Again Y-N"
  1049.     ALLOW$ = "YN": KY$ = "x"
  1050.     CALL getkey(ALLOW$, KY$)
  1051.     IF KY$ = "Y" THEN COLOR fc%, bc%: GOTO readafile
  1052.     COLOR fc%, bc%
  1053.     RETURN
  1054.  
  1055.        
  1056. read.it:      
  1057.     COLOR fc%, bc%
  1058.     CLS : FILENAME$ = UCASE$(FILENAME$)
  1059.     center 2, " Reading -> " + FILENAME$
  1060.     
  1061.     
  1062.  
  1063.     v = 6
  1064.     OPEN FILENAME$ FOR INPUT AS #1
  1065.         WHILE NOT EOF(1)
  1066.             LINE INPUT #1, BUFFER$
  1067.             LOCATE v, 6: PRINT BUFFER$
  1068.             v = v + 1
  1069.             IF v >= 18 THEN GOSUB hold.it
  1070.         WEND
  1071.     CLOSE #1
  1072. view.it:
  1073.     a$ = "Press a key to continue...": center 23, a$
  1074.     a$ = INKEY$: IF a$ = "" THEN GOTO view.it
  1075.        
  1076.     RETURN
  1077.  
  1078.  
  1079. hold.it:
  1080.     v = 6
  1081. 'KY$ = INKEY$
  1082. 'IF KY$ = CHR$(19) THEN WHILE INKEY$ = "": WEND  '  handle CTRL-S for pause
  1083.     a$ = "Press a key for next page...": center 23, a$
  1084.     a$ = INKEY$: IF a$ = "" THEN GOTO hold.it ELSE CLS : RETURN
  1085.     
  1086. close.it:
  1087.     a$ = "       Closing " + FILENAME$ + "          ": center 23, a$
  1088.     a$ = INKEY$: IF a$ = "" THEN GOTO close.it
  1089.     CLOSE #1
  1090.     RETURN
  1091.  
  1092.  
  1093. set.up:
  1094. 5200 'setup
  1095.     VIEW PRINT 1 TO 25: FC2% = fc%: BC2% = bc%
  1096.         m$(1) = "ALTER CONFIGURATION FILE"
  1097.         m$(2) = "DELETE OLD APPOINTMENT FILES"
  1098.         m$(3) = "FORMAT ACCOUNTING FILE DISK"
  1099.         m$(4) = "FORMAT NEW CLIENT FILE DISK"
  1100.         m$(5) = "EDIT TREATMENT CODES"
  1101.         m$(6) = "EDIT RECALL CODES"
  1102.         m$(7) = "EXIT TO MAIN MENU"
  1103. 5201 ' Redraw
  1104. np = 7
  1105. COLOR fc%, bc%, bc%
  1106. inflg% = 0
  1107. CLS
  1108. LABEL$ = " Set Up and Maintenance "
  1109. CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  1110. CALL center(2, "QBUDDY SYSTEMS")
  1111. fc = FC2%: bc = BC2%
  1112. CALL menu(fc, bc, bc, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  1113. CLS
  1114. a = CH
  1115.      IF a = 1 THEN GOSUB 40: GOSUB read.parm: GOTO 5200
  1116.      IF a = 4 THEN GOSUB am8format: GOTO 5200
  1117.     IF a = 3 THEN GOSUB amacformat: GOTO 5200
  1118.      IF a = 2 THEN GOSUB delapt: GOTO 5200
  1119.      IF a = 5 THEN GOSUB treatment.code: GOTO 5200
  1120.      IF a = 6 THEN GOSUB recall.code: GOTO 5200
  1121.      IF a = 7 THEN RETURN
  1122.  
  1123. WARN:
  1124.  
  1125. LABEL$ = "Formatting New File Disk or Directory"
  1126. CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  1127.  
  1128.     a$ = "Floppy disks must first be formatted using MS-DOS.": CALL center(6, a$)
  1129.     a$ = "CAUTION: This command will erase existing data.": CALL center(7, a$)
  1130.     a$ = "Directory paths are CRITICAL!": CALL center(8, a$)
  1131.     a$ = STRING$(60, 196): center 10, a$
  1132.     a$ = "Format commands are used to initialize NEW data disks.": center 12, a$
  1133.     a$ = "If you use the same directory path as existing data": center 13, a$
  1134.     a$ = "it will be destroyed. Please enter information carefully.": center 14, a$
  1135.     a$ = "Only CLIENT DATA is subject to LOSS due to new indexing.": center 16, a$
  1136.     a$ = "No other files are in jeopardy.": center 17, a$
  1137.     a$ = "Press any Key - An EXIT is allowed in next step": center 24, a$
  1138. warning: a$ = INKEY$: IF a$ = "" GOTO warning ELSE a = ASC(a$)
  1139.     a$ = STRING$(70, 32): center 24, a$
  1140. RETURN
  1141.  
  1142. am8format:
  1143.     GOSUB WARN
  1144.  
  1145.     LABEL$ = "Format New CLIENT File Disk/Directory"
  1146.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  1147.  
  1148. usrprmt:
  1149. a$ = STRING$(70, 32): SOUND 100, 3: center 10, a$
  1150.     a$ = "CREATE New CLIENT INDEX FILES": center 6, a$
  1151.     a$ = "Acceptable examples are... A:\  B:\   C:\PAT\   D:\CLIENT\": center 7, a$
  1152.     a$ = "Use a \ (backslash) following the last path entry": center 8, a$
  1153.     a$ = "Press ESC(ape) to EXIT.": center 23, a$
  1154.     LOCATE 10, 5: PRINT "Enter number of total records "; : GOSUB 490
  1155.     IF IN.STRING$ = "" THEN RETURN
  1156.     GOSUB 390
  1157.     IF num.err% = 1 THEN GOTO usrprmt ELSE
  1158.     IN.NUM% = maxrecords%
  1159.     LOCATE 10, 5: PRINT STRING$(40, 32);
  1160.     LOCATE 12, 5: PRINT "Enter complete path name for CLIENT files directory "; : GOSUB 490
  1161.     LOCATE 12, 5: PRINT STRING$(68, 32): IF IN.STRING$ = "" THEN RETURN
  1162.     F$ = IN.STRING$ + "RECORD.IDX": LOCATE 14, 10: COLOR bc%, fc%: PRINT "CREATING "; F$;
  1163.     COLOR fc%, bc%
  1164.      OPEN "R", #1, F$, 2
  1165.      FIELD #1, 2 AS NEXT.REC$: LSET NEXT.REC$ = MKI$(1): PUT #1, 1
  1166. FOR L% = 2 TO maxrecords%
  1167.      LSET NEXT.REC$ = MKI$(0): PUT #1, L%
  1168. NEXT L%
  1169.      CLOSE #1
  1170.      LOCATE 14, 10: PRINT "CREATING INDEX FILE  .IDX"; SPC(20);
  1171. FOR L% = 65 TO 90
  1172.      LOCATE 14, 30: PRINT CHR$(L%); : index.file$ = IN.STRING$ + CHR$(L%) + ".IDX": OPEN "R", #1, index.file$, 2: FIELD #1, 2 AS REC.PTR$
  1173.      LSET REC.PTR$ = MKI$(1): PUT #1, 1: CLOSE #1
  1174. NEXT L%: RETURN
  1175. IF ERL = usrprmt THEN RESUME am8format
  1176. 5500 'CLEAR HELP
  1177. 5505 COLOR 15, 2: FOR v = 22 TO 24
  1178.      LOCATE v, 5: PRINT SPC(68);
  1179.      NEXT v: RETURN'Clear Help
  1180.  
  1181.  
  1182. 6100 'READ PAT REC
  1183.      F$ = PAT.PATH$ + "RECORD.IDX": BLANK.REC% = 0: OPEN "R", #5, F$, 2: FIELD #5, 2 AS RI.LAST.REC$: GET #5, CLIENT.NUM%: RI.LAST.REC% = CVI(RI.LAST.REC$): CLOSE #5: IF RI.LAST.REC% = 0 THEN BLANK.REC% = 1: RETURN
  1184.      F$ = PAT.PATH$ + "CLIENT.APT": OPEN "R", #1, F$, 84
  1185.      FIELD #1, 20 AS LAST.NAME$, 20 AS FIRST.NAME$, 17 AS NEXT.APT$, 17 AS LAST.APT$, 10 AS NOTES$: GET #1, RI.LAST.REC%
  1186.      PI$(1) = LAST.NAME$: PI$(2) = FIRST.NAME$: PI$(5) = NOTES$: PI$(3) = NEXT.APT$: PI$(4) = LAST.APT$
  1187.      CLOSE #1
  1188.      RETURN
  1189.  
  1190. 6540 'WRITE PAT REC
  1191. 6550 '
  1192.      F$ = PAT.PATH$ + "CLIENT.APT": OPEN "R", #1, F$, 84
  1193.      FIELD #1, 20 AS LAST.NAME$, 20 AS FIRST.NAME$, 17 AS NEXT.APT$, 17 AS LAST.APT$, 10 AS NOTES$: GET #1, RI.LAST.REC%
  1194.      LSET LAST.NAME$ = PI$(1): LSET FIRST.NAME$ = PI$(2)
  1195.      LSET NEXT.APT$ = PI$(3): LSET LAST.APT$ = PI$(4): LSET NOTES$ = PI$(5)
  1196.      PUT #1, RI.LAST.REC%
  1197.      CLOSE #1
  1198.      RETURN
  1199. amacformat:
  1200.     GOSUB WARN
  1201.     LABEL$ = "Format New ACCOUNTING Disk/Directory"
  1202.     CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, page%)
  1203.  
  1204.     a$ = "CREATE AMAC/CLIENT INDEX FILES": center 6, a$
  1205.     a$ = "Acceptable examples are... A:\  B:\   C:\Client\   D:\Client\": center 7, a$
  1206.     a$ = "Use a \ (backslash) following the last path entry": center 8, a$
  1207.     a$ = "Press ESC(ape) to EXIT.": center 23, a$
  1208. entra:
  1209.  
  1210.     a$ = STRING$(70, 32): SOUND 100, 3: center 10, a$
  1211.     LOCATE 10, 5: PRINT "Enter number of total records "; : GOSUB 490
  1212.     IF IN.STRING$ = "" THEN RETURN
  1213.     GOSUB 390
  1214.     IF num.err% = 1 THEN GOTO entra ELSE
  1215.     IN.NUM% = maxrecords%
  1216.     LOCATE 10, 5: PRINT STRING$(40, 32);
  1217.     LOCATE 12, 5: PRINT "Enter complete path name for Client files directory "; : GOSUB 490
  1218.     LOCATE 12, 5: PRINT STRING$(68, 32): IF IN.STRING$ = "" THEN RETURN
  1219.     F$ = IN.STRING$ + "RECORD.IDX": LOCATE 14, 10: COLOR bc%, fc%: PRINT "CREATING "; F$;
  1220.     COLOR fc%, bc%
  1221.      OPEN "R", #1, F$, 2
  1222.      FIELD #1, 2 AS NEXT.REC$: LSET NEXT.REC$ = MKI$(1): PUT #1, 1
  1223. FOR L% = 2 TO maxrecords%
  1224.      LSET NEXT.REC$ = MKI$(0): PUT #1, L%
  1225. NEXT L%
  1226.      CLOSE #1
  1227.      LOCATE 14, 10: PRINT "CREATING INDEX FILE  .IDX"; SPC(20);
  1228. FOR L% = 65 TO 90
  1229.      LOCATE 14, 30: PRINT CHR$(L%); : index.file$ = IN.STRING$ + CHR$(L%) + ".IDX": OPEN "R", #1, index.file$, 2: FIELD #1, 2 AS REC.PTR$
  1230.      LSET REC.PTR$ = MKI$(1): PUT #1, 1: CLOSE #1
  1231. NEXT L%: RETURN
  1232.      OPEN "R", #1, F$, 2
  1233.      FIELD #1, 2 AS NEXT.REC$: LSET NEXT.REC$ = MKI$(1): PUT #1, 1
  1234. FOR L% = 2 TO maxrecords%
  1235.      LSET NEXT.REC$ = MKI$(0): PUT #1, L%
  1236. NEXT L%
  1237.      CLOSE #1
  1238. 'Dummy Record
  1239.     API$(1) = "Angelo"
  1240.     API$(2) = "Michael Genius"
  1241.     API$(3) = "123 Champions Dr"
  1242.     API$(4) = "Houston"
  1243.     API$(5) = "Tx"
  1244.     API$(6) = "77055-5555"
  1245.     API$(7) = "(713)555-5555"
  1246.     API$(8) = "(409)555-1212"
  1247.     API$(9) = "1650.00"
  1248.     API$(10) = " 123.65"
  1249.     API$(11) = "1526.35"
  1250.     API$(12) = "  45.00"
  1251.     API$(13) = "06-15-1988"
  1252.     API$(14) = "Will pay 9-15  "
  1253.     API$(15) = "06-25-1988"
  1254.     API$(16) = " 35.00"
  1255.     CLIENT.NUM% = 2
  1256. GOSUB initrec
  1257.  
  1258. WRITECLIENTREC:
  1259.  
  1260.      F$ = CLIENT.PATH$ + "CLIENT.APT": OPEN "R", #1, F$, 185
  1261.      FIELD #1, 20 AS LAST.NAME$, 20 AS FIRST.NAME$, 20 AS STREET$, 17 AS CITY$, 2 AS STATE$, 10 AS ZIP$, 13 AS TELE1$, 13 AS TELE2$, 7 AS TOTAL$, 7 AS DWNPAY$, 7 AS BAL$, 7 AS MOPMT$, 10 AS DUEDATE$, 15 AS NOTES$, 10 AS PMTDATE$, 7 AS AMTPAID$: _
  1262.                                             GET #1, RI.LAST.REC%
  1263.      LSET LAST.NAME$ = API$(1)
  1264.      LSET FIRST.NAME$ = API$(2)
  1265.      LSET STREET$ = API$(3)
  1266.      LSET CITY$ = API$(4)
  1267.      LSET STATE$ = API$(5)
  1268.      LSET ZIP$ = API$(6)
  1269.      LSET TELE1$ = API$(7)
  1270.      LSET TELE2$ = API$(8)
  1271.      LSET TOTAL$ = API$(9)
  1272.      LSET DWNPAY$ = API$(10)
  1273.      LSET BAL$ = API$(11)
  1274.      LSET DUEDATE$ = API$(13)
  1275.      LSET MOPMT$ = API$(12)
  1276.      LSET NOTES$ = API$(14)
  1277.      LSET PMTDATE$ = API$(15)
  1278.      LSET AMTPAID$ = API$(16)
  1279.      PUT #1, RI.LAST.REC%
  1280.      CLOSE #1
  1281.      RETURN
  1282.  
  1283. initrec:
  1284.  
  1285.     F$ = CLIENT.PATH$ + "RECORD.IDX": OPEN "R", #5, F$, 2: FIELD #5, 2 AS RI.LAST.REC$: GET #5, 1: RI.LAST.REC% = CVI(RI.LAST.REC$) + 1: LSET RI.LAST.REC$ = MKI$(RI.LAST.REC%): PUT #5, 1
  1286.     LSET RI.LAST.REC$ = MKI$(RI.LAST.REC%): PUT #5, CLIENT.NUM%: CLOSE #5: GOSUB 6540: index.file$ = CLIENT.PATH$ + LEFT$(API$(1), 1) + ".IDX": ADD.REC% = 1
  1287. incrementrec:
  1288.     OPEN "R", #3, index.file$, 2: FIELD #3, 2 AS AI.LAST.REC$: GET #3, 1: AI.LAST.REC% = CVI(AI.LAST.REC$) + 1: LSET AI.LAST.REC$ = MKI$(AI.LAST.REC%): PUT #3, 2: CLOSE : RETURN
  1289.  
  1290. delapt:
  1291.     v = 10: h = 30: num.err% = 0: APT.DATE.STR$ = ""
  1292.     COLOR fc%, bc%: CLS
  1293.     LOCATE 1, 1: PRINT "   Directory "; APT.PATH$; " contains the following Appointment Files.   ";
  1294.     LOCATE 4, 1: FILES "" + APT.PATH$ + "A?????.APT"
  1295. entre:
  1296.     MONTH.TP% = 0: DAY.TP% = 0: YEAR.TP% = 0: LY = 0
  1297.     SOUND 100, 2: IN.STRING$ = ""
  1298.     LOCATE 23, 66: PRINT SPC(15);
  1299.     center 24, "Press ESC to exit"
  1300.     LOCATE 23, 18: PRINT "Delete appointments PRIOR to what date? (mmddyy)"; : GOSUB 490
  1301.     IF a = 27 THEN RETURN
  1302.     center 23, STRING$(78, 32)
  1303.     GOSUB 390: IF num.err% THEN GOTO entre
  1304.     trap% = LEN(IN.STRING$)
  1305.         IF trap% <= 5 OR trap% >= 7 THEN GOTO entre
  1306.     MONTH.TP% = VAL(LEFT$(IN.STRING$, 2))
  1307.         APT.MO$ = LEFT$(IN.STRING$, 2)
  1308.     DAY.TP% = VAL(MID$(IN.STRING$, 3, 2))
  1309.         APT.DAY$ = MID$(IN.STRING$, 3, 2)
  1310.     YEAR.TP% = VAL(RIGHT$(IN.STRING$, 2))
  1311.         APT.YEAR$ = RIGHT$(IN.STRING$, 2)
  1312.        
  1313. yousure:
  1314.        
  1315.     APT.DATE.STR$ = APT.MO$ + "/" + APT.DAY$ + "/19" + APT.YEAR$
  1316.     a$ = "You are about to delete ALL files through " + APT.DATE.STR$
  1317.     center 23, a$
  1318.     a$ = "Press ESC to cancel or Any Key to continue"
  1319.     center 24, a$
  1320.     GOSUB 1000
  1321.     IF a = 27 THEN RETURN
  1322.     a$ = STRING$(70, 32)
  1323.     center 22, a$
  1324.     center 23, a$
  1325.     center 24, a$
  1326. calcit: DC = INT(365.25 * YEAR.TP%) + INT(30.56 * MONTH.TP%) + LY + DAY.TP%: DW = 3 + DC - 7 * INT((DC + 2) / 7): MD(2) = 28 + LE
  1327.     MAX.DAYS% = MD(MONTH.TP%)
  1328. LOCATE 24, 35: PRINT ""
  1329.     FOR L% = 5 TO 21: IF SCREEN(L%, 1) <> 65 THEN GOTO notfound
  1330.         FOR L1% = 2 TO 56 STEP 18: IF SCREEN(L%, L1%) = 3 THEN RETURN
  1331.             T$ = "": FOR L2% = L1% TO L1% + 6: T$ = T$ + CHR$(SCREEN(L%, L2%)): NEXT L2%
  1332.             T% = VAL(T$)
  1333.             IF T% <= DC THEN GOSUB killit ELSE GOTO notfound
  1334.         NEXT L1%
  1335.     NEXT L%
  1336. notfound:
  1337.     IF APT.DATE.STR$ = "" THEN APT.DATE.STR$ = "NO FILES FOUND"
  1338.     center 23, STRING$(70, 32)
  1339.     center 24, "No files to delete. Press Any Key"
  1340.     LOCATE 23, 26: PRINT "Killed files from "; APT.DATE.STR$;
  1341.     a$ = INPUT$(1)
  1342.     RETURN
  1343. listit:
  1344.     
  1345.     T$ = APT.PATH$ + "A" + RTRIM$(T$) + ".APT"
  1346.     LOCATE v, h: PRINT T$;
  1347.     v = v + 1: IF v >= 19 THEN v = 1
  1348.     RETURN
  1349.  
  1350. 29999 'killit
  1351. killit:
  1352.     LOCATE L%, L1% - 1: PRINT SPC(12);
  1353.     T$ = APT.PATH$ + "A" + RTRIM$(T$) + ".APT"
  1354.     KILL T$
  1355.     RETURN
  1356.  
  1357. Calmod:
  1358. 30000 'Set BASIC Library ON
  1359. 30002 '
  1360. 30020 ' SEPARATE MONTH, DAY, AND YEAR FROM IN.STRING$
  1361. 30030 date.err% = 0: MONTH.TP$ = "": DAY.TP$ = "": YEAR.TP$ = "": DATE.STR$ = ""
  1362. 30040 '
  1363. 30050 FOR LP% = 1 TO LEN(IN.STRING$)
  1364. 30060 CUR.CHR$ = MID$(IN.STRING$, LP%, 1)
  1365. 30070 IF CUR.CHR$ >= "0" AND CUR.CHR$ <= "9" THEN MONTH.TP$ = MONTH.TP$ + CUR.CHR$
  1366. 30072 NEXT LP%
  1367. 30080 IF MONTH.TP$ = "" OR LEN(IN.STRING$) - LP% = 0 THEN 30200
  1368. 30082 IF VAL(MONTH.TP$) > 12 THEN 30200
  1369. 30090 FOR LP% = LP% + 1 TO LEN(IN.STRING$)
  1370. 30110 CUR.CHR$ = MID$(IN.STRING$, LP%, 1)
  1371. 30120 IF CUR.CHR$ >= "0" AND CUR.CHR$ <= "9" THEN DAY.TP$ = DAY.TP$ + CUR.CHR$
  1372. 30125 NEXT LP%
  1373. 30130 IF DAY.TP$ = "" OR LEN(IN.STRING$) - LP% = 0 THEN 30200
  1374. 30140 FOR LP% = LP% + 1 TO LEN(IN.STRING$)
  1375. 30150 CUR.CHR$ = MID$(IN.STRING$, LP%, 1)
  1376. 30160 IF CUR.CHR$ >= "0" AND CUR.CHR$ <= "9" THEN YEAR.TP$ = YEAR.TP$ + CUR.CHR$
  1377. 30165 NEXT LP%
  1378. 30170 IF YEAR.TP$ = "" THEN 30200
  1379. 30180 MONTH.TP% = VAL(MONTH.TP$): DAY.TP% = VAL(DAY.TP$): YEAR.TP% = VAL(YEAR.TP$)
  1380. 30190 GOSUB 30350: RETURN
  1381. 30200 date.err% = 1: RETURN
  1382. 30210 '
  1383. 30220 'SEPARATE M/Y
  1384. 30225 '
  1385. 30230 date.err% = 0: MONTH.TP$ = "": YEAR.TP$ = ""
  1386. 30240 FOR LP% = 1 TO LEN(IN.STRING$)
  1387. 30250 CUR.CHR$ = MID$(IN.STRING$, LP%, 1)
  1388. 30260 IF CUR.CHR$ >= "0" AND CUR.CHR$ <= "9" THEN 30262 ELSE 30280
  1389. 30262 MONTH.TP$ = MONTH.TP$ + CUR.CHR$
  1390. 30265 NEXT LP%
  1391. 30280 FOR LP% = LP% + 1 TO LEN(IN.STRING$)
  1392. 30290 CUR.CHR$ = MID$(IN.STRING$, LP%, 1)
  1393. 30300 IF CUR.CHR$ >= "0" AND CUR.CHR$ <= "9" THEN 30302 ELSE 30310
  1394. 30302 YEAR.TP$ = YEAR.TP$ + CUR.CHR$
  1395. 30305 NEXT LP%
  1396. 30310 IF YEAR.TP$ = "" THEN 30330
  1397. 30320 MONTH.TP% = VAL(MONTH.TP$): YEAR.TP% = VAL(YEAR.TP$)
  1398. 30325 DAY.TP$ = "1": DAY.TP% = 1: DATE.STR$ = MO$(MONTH.TP%) + " - 19" + YEAR.TP$: RETURN
  1399. 30330 BEEP: date.err% = 1: RETURN
  1400. 30340 '
  1401. 30350 'VALID DATE
  1402. 30351 '
  1403. 30352 date.err% = 0: LY = 0: IF MONTH.TP% > 2 THEN 30356
  1404. 30354 LY = 1: LE = 1: IF YEAR.TP% MOD 4 THEN LY = 2: LE = 0
  1405. 30356 DC = INT(365.25 * YEAR.TP%) + INT(30.56 * MONTH.TP%) + LY + DAY.TP%: DW = 3 + DC - 7 * INT((DC + 2) / 7): MD(2) = 28 + LE: IF MONTH.TP% > 12 THEN 30362
  1406. 30358  MAX.DAYS% = MD(MONTH.TP%): IF YEAR.TP% = 0 OR DAY.TP% > MAX.DAYS% THEN 30362
  1407. 30360 DATE.STR.TP$ = MO$(MONTH.TP%) + " " + DAY.TP$ + ", 19" + LTRIM$(YEAR.TP$): RETURN
  1408. 30362 DW = 8: date.err% = 1: RETURN
  1409. 40000 'ERRORS
  1410.     SELECT CASE ERR
  1411.         CASE 4
  1412.             endofdata = TRUE
  1413.             RESUME NEXT
  1414.         CASE 25
  1415.             a$ = "Turn Printer On"
  1416.             center 12, a$
  1417.             CALL delay(2)
  1418.             RESUME main.menu
  1419.            
  1420.         CASE 27
  1421.             a$ = "Printer is out of paper."
  1422.             center 12, a$
  1423.             CALL delay(2)
  1424.             RESUME main.menu
  1425.            
  1426.         CASE 52
  1427.             a$ = "Path File Access Error Occurred"
  1428.             center 12, a$
  1429.             CALL delay(2)
  1430.             RESUME main.menu
  1431.            
  1432.         CASE 71
  1433.             CLS
  1434.             a$ = "Drive is not ready"
  1435.             center 12, a$
  1436.             CALL delay(2)
  1437.             RESUME main.menu
  1438.         CASE 72
  1439.             CLS
  1440.             a$ = "Disk Media Problem"
  1441.             center 12, a$
  1442.             CALL delay(2)
  1443.             RESUME main.menu
  1444.  
  1445.         CASE 75
  1446.             CLS
  1447.             a$ = "Path File Access Error Occurred"
  1448.             center 12, a$
  1449.             CALL delay(2)
  1450.             RESUME main.menu
  1451.  
  1452.         CASE 53
  1453.             a$ = "File not found...": center 24, a$
  1454.             SOUND 240, 2
  1455.             IF ERL = 6550 THEN RESUME notfound
  1456.             IF ERL = 110 THEN RESUME tcovl.trap
  1457.             IF ERL = 150 THEN RESUME rcovl.trap
  1458.             IF ERL = 60 THEN RESUME parm.trap
  1459.             IF ERL = 65 THEN RESUME parm.trap
  1460.             IF ERL = 100 THEN RESUME prn.trap
  1461.             IF ERL = 105 THEN RESUME prn.trap
  1462.             
  1463.         CASE ELSE
  1464.             CLS
  1465.             LOCATE 12, 35: PRINT "USER ERROR "; ERR;
  1466.             center 13, "Please Read Documentation and Correct"
  1467.             center 15, "You will have to re-start AMSETUP.EXE"
  1468.             END
  1469.     END SELECT
  1470.  
  1471. 50000 '
  1472. logo:
  1473.     COLOR 15, 4: CLS
  1474.     LOCATE 5, 1
  1475.        
  1476.  
  1477.  
  1478.  PRINT "      ╔══════════════════════════════════════════════════════════════════╗   "
  1479.  PRINT "      ║                                                                  ║   "
  1480.  PRINT "      ║            █▀▀▀▀█      █               █     █                   ║   "
  1481.  PRINT "      ║            █    █  ▄▄  █▄▄▄▄ ▄   ▄ ▄▄▄▄█ ▄▄▄▄█ ▄   ▄             ║   "
  1482.  PRINT "      ║            █▄▄▄▄█      █▄▄▄█ █▄▄▄█ █▄▄▄█ █▄▄▄█ █▄▄▄█             ║   "
  1483.  PRINT "      ║               █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█              ║   "
  1484.  PRINT "      ║                           Version 2.1                            ║   "
  1485.  PRINT "      ╠══════════════════════════════════════════════════════════════════╣   "
  1486.  PRINT "      ║  I would like to thank Thomas Hanlen III for making ADVBAS40     ║   "
  1487.  PRINT "      ║  available to the public. I have enjoyed this library. And,      ║   "
  1488.  PRINT "      ║  the routines are a programmers dream. This module is used       ║   "
  1489.  PRINT "      ║  to format the files used in the ACCOUNTING MODULE of QBUDDY.    ║   "
  1490.  PRINT "      ║  Working Routines: COPY FILES - DIRECTORY WILDCARD SCAN -        ║   "
  1491.  PRINT "      ║        READ TEXT FILES - EDITOR - PARAMETER CONFIG - ERROR       ║   "
  1492.  PRINT "      ║        TRAPS - HARDWARE CALLS - DOS SHELL BACKUP - 3D MENU       ║   "
  1493.  PRINT "      ║                                                                  ║   "
  1494.  PRINT "      ║  More to thank...not enough room. SHARE/TRASHCAN/COPY/CHANGE     ║   "
  1495.  PRINT "      ║    Joe Lincoln - LINX BBS (713) 440-7364 - Houston, Texas        ║   "
  1496.  PRINT "      ║                                                                  ║   "
  1497.  PRINT "      ╚══════════════════════════ Press any key ═════════════════════════╝   "
  1498.     LOCATE 19, 26: COLOR 20, 15: PRINT "SETUP AND MAINTENANCE MODULE": COLOR 15, 4
  1499. GOSUB 1000
  1500. RETURN
  1501.  
  1502. SUB box (r1%, c1%, R2%, c2%, men%)
  1503.  
  1504. ' DRAW A BOX AT SPECIFIED COORDINATE
  1505.  
  1506.       GLOOP$ = "║"
  1507.       BOXTOP = (c2% - c1%) - 1: BOXTOP$ = CHR$(201) + STRING$(BOXTOP, 205) + CHR$(187)
  1508.       BOXBOTTOM$ = CHR$(200) + STRING$(BOXTOP, 205) + CHR$(188)
  1509.       MIDBOX$ = CHR$(204) + STRING$(BOXTOP, 205) + CHR$(185)
  1510.       LOCATE r1%, c1%: PRINT BOXTOP$; : FOR E1% = r1% + 1 TO R2% - 1
  1511.       LOCATE E1%, c1%: PRINT GLOOP$; : LOCATE E1%, c2%: PRINT GLOOP$; : NEXT
  1512.       LOCATE R2%, c1%: PRINT BOXBOTTOM$;
  1513.       IF men% > 0 THEN   'Prints optional top and bottom bars in box
  1514.        LOCATE r1% + 3, c1%: PRINT MIDBOX$;
  1515.        LOCATE R2% - 2, c1%: PRINT MIDBOX$;
  1516.        END IF
  1517.  
  1518. END SUB
  1519.  
  1520. SUB box.text (tl$, r1%, c1%, fgd, bkg, ofg, obk)
  1521.      
  1522.       ' BOX TEXT AT SPECIFIED COORDINATE
  1523.       'This routine will box a one-line string of text in the color
  1524.       'of your choice at the starting coordinate you choose.
  1525.       'TL$ is the text, r1% is the starting row, c1% is the starting column.
  1526.       'fgd and bkg are the fore and background colors of the boxed text.
  1527.       'ofg and obk are the colors to restore after you've boxed the text.
  1528.        
  1529.        
  1530.     GLOOP$ = "║"
  1531.     BOXTOP = LEN(tl$) + 2
  1532.     BOXTOP$ = CHR$(201) + STRING$(BOXTOP, 205) + CHR$(187): BOXBOTTOM$ = CHR$(200) + STRING$(BOXTOP, 205) + CHR$(188)
  1533.     MIDBOX$ = GLOOP$ + " " + tl$ + " " + GLOOP$
  1534.     COLOR fgd, bkg
  1535.     LOCATE r1%, c1%: PRINT BOXTOP$; : E1% = r1% + 1: R2% = E1% + 1
  1536.     LOCATE E1%, c1%: PRINT MIDBOX$;
  1537.     LOCATE R2%, c1%: PRINT BOXBOTTOM$;
  1538.     COLOR ofg, obk  'switch to these text colors after boxing the text
  1539.  
  1540. END SUB
  1541.  
  1542. SUB center (whichline, tl$)
  1543.  
  1544.  'This is a simple routine that centers a string of text TL$
  1545.  'on line number WHICHLINE. You can use it anywhere.
  1546.  
  1547.     tl = LEN(tl$)
  1548.     tl = INT((80 - tl) / 2)
  1549.     LOCATE whichline, tl
  1550.     PRINT tl$;
  1551.  
  1552.  
  1553. END SUB
  1554.  
  1555. SUB hold
  1556. WHILE INKEY$ = "": WEND
  1557.  
  1558. END SUB
  1559.  
  1560. SUB infile (PAT.PATH$, APT.PATH$, inflg%, FILENAME$, fc%, bc%, SYS.PATH$, ERCD%, handle%, faccess%, mode%, SUB.PATH$)
  1561. SUB$ = STRING$(64, 0): DRV$ = "x"
  1562. DEFINT A-Z
  1563.  
  1564. init.infile:
  1565. FIL$ = SPACE$(12): CLS
  1566.  
  1567. inflg% = 0: FILENAME$ = ""
  1568.     
  1569.  
  1570. begin.infile:
  1571.    LABEL$ = "Directories Scan ": v = 7
  1572.    page% = 0
  1573. CALL makewindow(10, 10, 70, 14, LABEL$, 1, 3, fc%, bc%, page%)
  1574.  
  1575. getdrive:
  1576.  
  1577.     a$ = "Wildcards are acceptable *.* ?": center 4, a$
  1578.     a$ = "Defaults to current directory": center 5, a$
  1579.     a$ = "Press RETurn to EXIT": center 7, a$
  1580.     LOCATE 12, 12: INPUT "Enter search path and filespec:  "; IN.STR$
  1581. scandr:
  1582. CLS : PRINT
  1583. PRINT "   ┌──────────────────────────────────────────────────────────────────────┐"
  1584. PRINT "   │ ╔════════════════════════════════════════╗╔════════════════════════╗ │"
  1585. PRINT "   │ ║ FILENAME   │  DATE  │   TIME  │  SIZE  ║║                        ║ │"
  1586. PRINT "   │ ╚════════════════════════════════════════╝╚════════════════════════╝ │"
  1587. PRINT "   │                                                                      │"
  1588. PRINT "   │                                                                      │"
  1589. PRINT "   │                                                                      │"
  1590. PRINT "   │                                                                      │"
  1591. PRINT "   │                                                                      │"
  1592. PRINT "   │                                                                      │"
  1593. PRINT "   │                                                                      │"
  1594. PRINT "   │                                                                      │"
  1595. PRINT "   │                                                                      │"
  1596. PRINT "   │                                                                      │"
  1597. PRINT "   │                                                                      │"
  1598. PRINT "   │                                                                      │"
  1599. PRINT "   │                                                                      │"
  1600. PRINT "   │                                                                      │"
  1601. PRINT "   │                                                                      │"
  1602. PRINT "   │                                                                      │"
  1603. PRINT "   └──────────────────────────────────────────────────────────────────────┘"
  1604.  
  1605.  
  1606.  
  1607. LOCATE 4, 50: COLOR bc%, fc%: PRINT " PATH " + RTRIM$(IN.STR$) + " "; : COLOR fc%, bc%
  1608. 'ty% = 2
  1609. 'CALL makewindow(LCOL%, TROW%, RCOL%, BROW%, LABEL$, FRAME%, ty%, fc%, bc%, PAGE%)
  1610. 'LOCATE 6, 6: PRINT "FILENAME        DATE       TIME        SIZE";
  1611.     FILENAME$ = UCASE$(IN.STR$)
  1612.  
  1613.    seekattr = 23 ' seek read-only, normal, hidden, system, and directory files
  1614.  
  1615.    CMD$ = FILENAME$
  1616.    IF CMD$ = "" THEN inflg% = 1: GOTO bail.out
  1617.  
  1618.    I = INSTR(CMD$, " ")
  1619.    IF I THEN FIL$ = LEFT$(CMD$, I - 1): CMD$ = MID$(CMD$, I + 1) ELSE FIL$ = CMD$: GOTO DoIt
  1620.  
  1621.    I = INSTR(CMD$, " ")
  1622.    IF I THEN parm1$ = LEFT$(CMD$, I - 1): CMD$ = MID$(CMD$, I + 1) ELSE parm1$ = CMD$: GOTO DoIt
  1623.  
  1624.    I = INSTR(CMD$, " ")
  1625.    IF I THEN parm2$ = LEFT$(CMD$, I - 1): parm3$ = MID$(CMD$, I + 1) ELSE parm2$ = CMD$
  1626.  
  1627. DoIt:
  1628.    IF parm1$ = "" THEN GOTO Display
  1629.    IF INSTR(parm1$, "/") THEN p$ = parm1$: GOSUB ExtractDate ELSE IF INSTR(parm1$, ":") THEN p$ = parm1$: GOSUB ExtractTime ELSE p$ = parm1$: GOSUB ExtractAttr
  1630.  
  1631.    IF parm2$ = "" THEN GOTO Display
  1632.    IF INSTR(parm2$, "/") THEN p$ = parm2$: GOSUB ExtractDate ELSE IF INSTR(parm2$, ":") THEN p$ = parm2$: GOSUB ExtractTime ELSE p$ = parm2$: GOSUB ExtractAttr
  1633.  
  1634.    IF parm3$ = "" THEN GOTO Display
  1635.    IF INSTR(parm3$, "/") THEN p$ = parm3$: GOSUB ExtractDate ELSE IF INSTR(parm3$, ":") THEN p$ = parm3$: GOSUB ExtractTime ELSE p$ = parm3$: GOSUB ExtractAttr
  1636.  
  1637. Display:
  1638.     DRV$ = LEFT$(FIL$, 1)
  1639.     a$ = STRING$(70, 32): center 23, a$
  1640.     FIL$ = FIL$ + CHR$(0)
  1641.     a = ASC(FIL$)
  1642.     IF a < 65 OR a > 68 THEN DRV$ = LEFT$(SYS.PATH$, 1)
  1643. CALL diskstat(DRV$, fre.clust%, tot.clust%, bytes.sec%, secs.clust%)
  1644.     cluster.size# = CDBL(bytes.sec%) * CDBL(secs.clust%)
  1645.     free.disk.space# = CDBL(fre.clust%) * cluster.size#
  1646.     tot.disk.spc# = CDBL(tot.clust%) * cluster.size#
  1647.     
  1648. CALL drvspace(DRV$, a%, b%, c%)
  1649.     free# = CDBL(a%) * CDBL(b%) * CDBL(c%)
  1650.     free$ = STR$(free#)
  1651.     LOCATE 21, 5: PRINT " Total Disk Space:"; tot.disk.spc#; " |  Free Space:"; free.disk.space#; " | Cluster:"; cluster.size#;
  1652.         
  1653.     CALL findfirstf(FIL$, seekattr, ERCD%)
  1654.     IF ERCD% THEN GOSUB uh.oh ELSE GOTO gofor.next
  1655.     GOTO begin.infile
  1656.     
  1657. gofor.next:
  1658.    WHILE ERCD% = 0
  1659.     GOSUB DisplayFile
  1660.     CALL findnextf(ERCD%)
  1661.    WEND
  1662. stop.here:
  1663. 'A$ = STRING$(70, 32): center 23, A$
  1664.       
  1665.        
  1666.     a$ = "Press any key to continue": center 23, a$
  1667.     a$ = INKEY$: IF a$ = "" THEN GOTO stop.here
  1668.    GOTO bail.out
  1669.    
  1670. ExtractTime:
  1671.    I = INSTR(p$, ":")
  1672.    hour = VAL(p$)
  1673.    p$ = MID$(p$, I + 1)
  1674.    minute = VAL(p$)
  1675.    I = INSTR(p$, ":")
  1676.    IF I THEN Second = VAL(MID$(p$, I + 1))
  1677.    stime = -1
  1678.    RETURN
  1679.  
  1680. ExtractDate:
  1681.    I = INSTR(p$, "/")
  1682.    mnth = VAL(p$)
  1683.    p$ = MID$(p$, I + 1)
  1684.    DAY = VAL(p$)
  1685.    I = INSTR(p$, "/")
  1686.    IF I THEN YEAR = VAL(MID$(p$, I + 1)) ELSE YEAR = VAL(MID$(DATE$, 7))
  1687.    sdate = -1
  1688.    RETURN
  1689.  
  1690. ExtractAttr:
  1691.    attr = 0
  1692.    CALL upcase(p$)
  1693.    IF INSTR(p$, "R") THEN attr = attr + 1
  1694.    IF INSTR(p$, "H") THEN attr = attr + 2
  1695.    IF INSTR(p$, "S") THEN attr = attr + 4
  1696.    IF INSTR(p$, "D") THEN attr = attr + 16
  1697.    IF INSTR(p$, "A") THEN attr = attr + 32
  1698.    sattr = -1
  1699.    RETURN
  1700.  
  1701. DisplayFile:
  1702.    v = v + 1
  1703.    KY$ = INKEY$
  1704.    IF KY$ = CHR$(19) THEN WHILE INKEY$ = "": WEND  '  handle CTRL-S for pause
  1705.    DNAME$ = SPACE$(12)
  1706.    CALL getnamef(DNAME$, dlen)
  1707.    CALL GetTimeF(dhour, dmin, dsec)
  1708.    CALL GetDateF(dmnth, dday, dyear)
  1709.    CALL GetAttrF(dattr)
  1710.    CALL GetSizeF(sizelow%, sizehigh%)
  1711.    sizelow# = CDBL(sizelow%)
  1712.    IF sizelow% < 0 THEN sizelow# = sizelow# + 65536#
  1713.    filesize# = sizelow# + CDBL(sizehigh%) * 65536#
  1714.    IF v >= 20 THEN v = 8: GOSUB wait.up
  1715.    LOCATE v, 7: PRINT DNAME$; "   "; fnf$(dmnth); "/"; fnf$(dday); "/"; fnf$(dyear); "   "; fnf$(dhour); ":"; fnf$(dmin); ":"; fnf$(dsec); "   "; filesize#; "  ";
  1716.    pattr = dattr: GOSUB DisplayAttr
  1717.    IF NOT (sdate OR stime OR sattr) THEN RETURN
  1718.  
  1719.    DNAME$ = LEFT$(DNAME$, dlen) + CHR$(0)
  1720.    PRINT "   ------>     ";
  1721.  
  1722.    IF sdate AND NOT stime THEN hour = dhour: minute = dmin: Second = dsec
  1723.    IF stime AND NOT sdate THEN DAY = dday: mnth = dmnth: YEAR = dyear
  1724.  
  1725.    IF sdate OR stime THEN CALL setftd(DNAME$, mnth, DAY, YEAR, hour, minute, Second)
  1726.    IF sdate THEN PRINT fnf$(mnth); "/"; fnf$(DAY); "/"; fnf$(YEAR); "   ";  ELSE PRINT SPACE$(11);
  1727.    IF stime THEN PRINT fnf$(hour); ":"; fnf$(minute); ":"; fnf$(Second); "   ";  ELSE PRINT SPACE$(11);
  1728.  
  1729.    IF NOT sattr THEN RETURN
  1730.    IF sattr THEN CALL SetFattr(DNAME$, attr)
  1731.    pattr = attr: GOSUB DisplayAttr
  1732.    RETURN
  1733.  
  1734. DisplayAttr:
  1735. 'IF pattr = 0 THEN PRINT "   ";
  1736.     IF pattr AND 1 THEN PRINT "   ";
  1737.     IF pattr AND 2 THEN PRINT "   ";
  1738.     IF pattr AND 4 THEN PRINT "   ";
  1739.     IF pattr AND 16 THEN PRINT "DIR";
  1740.     IF pattr AND 32 THEN PRINT "   ";
  1741.    RETURN
  1742.  
  1743. wait.up:
  1744.     a$ = STRING$(70, 32): center 23, a$
  1745.     center 23, "More Y-N": SOUND 250, 2
  1746.     ALLOW$ = "YN": KY$ = "x": CALL getkey(ALLOW$, KY$)
  1747.     IF KY$ = "N" THEN GOTO bail.out
  1748.     FOR vc% = 8 TO 19: LOCATE vc%, 5: PRINT STRING$(60, 32); : NEXT vc%
  1749.     RETURN
  1750. uh.oh:
  1751. CALL upcase(FIL$): a$ = "Path not found to  " + FIL$ + "  -> Press any key": center 12, a$
  1752. RETURN
  1753. bad.news:
  1754.     a$ = INPUT$(1)
  1755.     inflg% = 1
  1756.  
  1757.  
  1758. bail.out:
  1759.       
  1760. END SUB
  1761.  
  1762. DEFSNG A-Z
  1763. SUB menu (fgd, BKGD, brdr, PAT.PATH$, APT.PATH$, PROG.NAME$, PRINTER$, ver$, fc%, bc%, TODAY.DATE.STR$, inflg%, SYS.PATH$)
  1764.  
  1765. 'This is the heart of the program.
  1766.  
  1767. COLOR fgd, BKGD, brdr
  1768.       REM
  1769.       REM
  1770. step1:
  1771.       a$ = ver$
  1772.       CALL center(23, a$)
  1773.       a$ = TODAY.DATE.STR$
  1774.       LOCATE 2, 60: PRINT a$;
  1775.       row = 8: col = 20: '     SET ROW AND COLUMN FOR MENU
  1776.       C1F = fgd: C1B = BKGD'   SET COLOR CODES
  1777.       C2F = BKGD: C2B = fgd: '       SET BAR COLOR TO COLOR 0,2
  1778.       'M$(1) = "ADD A NAME": M$(2) = "UPDATE A NAME": M$(3) = "DELETE A NAME": M$(4) = "FIND A NAME": M$(5) = "FILTER THE LIST": M$(6) = "SORT THE LIST": M$(7) = "PRINT THE LIST": M$(8) = "QUIT THE PROGRAM"
  1779.       'np = 8:
  1780.       '
  1781. step2:
  1782.  
  1783. GOSUB step3
  1784.       CLS
  1785.       GOTO menu.end
  1786.       GOTO step1
  1787.       GOTO step2
  1788.       '
  1789.       '
  1790. step3:
  1791.       COLOR C1F, C1B: ' CLS
  1792.       CALL center(7, "MENU SELECTIONS")
  1793.       CALL center(row + 1, "Use <ARROWS> to select <ENTER> to Choose")
  1794.  
  1795.       FOR J = 1 TO 16: x$ = INKEY$: NEXT: CH = 1
  1796.       LS = 2: FOR J = 1 TO np: IF LEN(m$(J)) > LS THEN LS = LEN(m$(J))
  1797.       NEXT: ML$ = "##  \" + SPACE$(LS - 1) + "\": SL = col + 18 - LEN(ML$) / 2
  1798.       FOR K = 1 TO np: LOCATE row + 2 + K, SL: PRINT USING ML$; K, m$(K): NEXT
  1799. step4:
  1800.     LOCATE row + 2 + CH, SL: COLOR C2F, C2B: PRINT USING ML$; CH, m$(CH): COLOR C1F, C1B: TD = CH
  1801. step5:
  1802.       CALL getkbd(INSERT%, capslock%, numlocl%, scrolock%)
  1803.     IF capslock% THEN LOCATE 24, 56: PRINT "CAPS";  ELSE LOCATE 24, 56: PRINT "    ";
  1804.     IF numlocl% THEN LOCATE 24, 62: PRINT "NUM";  ELSE LOCATE 24, 62: PRINT "    ";
  1805.     IF scrolock% THEN LOCATE 24, 68: PRINT "SCRL";  ELSE LOCATE 24, 68: PRINT "     ";
  1806.     IF INSERT% THEN LOCATE 24, 50: PRINT "INS";  ELSE LOCATE 24, 50: PRINT "    ";
  1807.      
  1808.       CALL tyme
  1809.       x$ = INKEY$: IF LEN(x$) THEN KP = ASC(RIGHT$(x$, 1)) ELSE GOTO step5
  1810.      
  1811.       IF KP = 72 THEN CH = CH - 1: IF CH < 1 THEN CH = np
  1812.       IF KP = 80 THEN CH = CH + 1: IF CH > np THEN CH = 1
  1813.       IF x$ >= "1" AND x$ <= "9" THEN IF VAL(x$) >= 1 AND VAL(x$) <= np THEN CH = VAL(x$): RETURN
  1814.       IF KP = 13 THEN RETURN
  1815.       IF KP <> 72 AND KP <> 80 THEN KP = KP - 48: IF KP < 1 OR KP > np THEN PRINT CHR$(7): GOTO step5 ELSE CH = KP
  1816.       IF CH = TD THEN GOTO step5 ELSE LOCATE row + 2 + TD, SL: PRINT USING ML$; TD, m$(TD): GOTO step4
  1817.  
  1818. menu.end:
  1819.  
  1820. END SUB
  1821.  
  1822. SUB rmsg (whichline, tl$)
  1823. 'This routine also centers a string of text TL$ on line number WHICLINE.
  1824. 'Unlike the CENTER subroutine, it clears the line before printing the
  1825. 'centered text. You can use this anywhere, too."
  1826.  
  1827.        
  1828.     tl = LEN(tl$)
  1829.     tl = INT((80 - tl) / 2)
  1830.     LOCATE whichline, 2
  1831.     PRINT STRING$(77, 32);
  1832.     LOCATE whichline, tl
  1833.     PRINT tl$;
  1834.  
  1835. END SUB
  1836.  
  1837. SUB Sclr (fc%, bc%)
  1838. FOR v = 5 TO 21: LOCATE v, 3: COLOR fc%, bc%: PRINT STRING$(76, 32)
  1839. NEXT v
  1840. END SUB
  1841.  
  1842. SUB tyme
  1843. TT$ = TIME$
  1844. Hr = VAL(TT$)
  1845. IF Hr < 12 THEN Ampm$ = "AM" ELSE Ampm$ = "PM"
  1846. IF Hr > 12 THEN Hr = Hr - 12
  1847. LOCATE 2, 4: PRINT STR$(Hr); RIGHT$(TT$, 6); Ampm$
  1848. END SUB
  1849.  
  1850.